zoukankan      html  css  js  c++  java
  • 线程安全,同步锁(同步方法和同步代码)

    1.线程安全(Synchronized线程锁):处理线程的两种方式:1.同步代码块2.同步锁
    2.同步代码块:的锁对象可以是任意对象:程序中存在多个线程时要设置线程锁才能保证线程安全
    3.同步方法:锁的对象可以是this,因为this代表的是本类的意思,也是对象的一种.
    4.设置同步锁:同步代码块:public class Tick implements Runnable(){ 编译抢票程序:private int tick;//线程对象共享的变量要放在类中定义不然定义在方法里面就成了每个线 程都有的变量,如:每个线程都有100张票而不是一共有100张票 Object obj=new Object();线程锁的对象必须放在类中定义不然每个线程都有一把锁就锁不住线程对象了
    public void run(){ while(true)加上同步(Synchronized(obj) {{if(tick>0){加上睡眠能让效果更明显(睡100毫秒):Thread.sleep(100)system.out.println (Thread.currentThread().getName()+"售出 第"+ticket--+"张票")}}}
    5.同步方法:public class tick implements Runnable(){ private int tick=100; while(true){save();}}
    public Synchronized void save(){ if(tick>0){System.out.println(Thread.currentThread().getName()+"售出第"+ticket--+"张票");}}
    把同步锁方法写在Runnable的实现类里面再调用同步锁方法就行了
    6.Lock多线程锁:private int tick=0; 创建lock锁:Lock l=new ReentrantLock(); 循环取票:while(true){l.lock();if(tick>0){system.out.println(Thtread.currentThread ().getName()+"出售第"+tick--+"张票"} 关闭锁资源:l.unclock}

  • 相关阅读:
    centos7添加firewalld规则
    centos7安装redis5
    Oracle 监听
    创建Oracle表空间及用户
    nginx+keepalive
    oracle 修改端口
    Oracle新建数据库
    Redhat7.5安装JBOSS4.2.0
    kubernetes的一些基本命令
    安装python3.6后使用pip报错
  • 原文地址:https://www.cnblogs.com/hankai2735/p/11481880.html
Copyright © 2011-2022 走看看