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}

  • 相关阅读:
    文件权限
    函数指针
    位操作
    宏定义
    GNU gcc常用编译选项
    SHELL编程(六)---------数组和函数
    26.使用中间件的方式包装日志输出
    25.最基本的日志输出方式,内置日志包使用
    24.把熔断器整合到我们的客户端代码中(初步)
    23.熔断器学习,熔断器的三种状态,状态获取
  • 原文地址:https://www.cnblogs.com/hankai2735/p/11481880.html
Copyright © 2011-2022 走看看