• Java——线程同步


    格式:
    Synchronized(对象){   //让这里的代码变成一个原子操作,不会再代码块的某一个地方切换到其他线程;对象可以是Object
            需同步代码块
    }
    同步代码块的对象可以是?
    需要同步的代码块是?

    同步方法2:
    格式:把同步关键字加在方法声明前
    锁对象:this
    public synchronized void sell(){    //run方法里面直接调用
                    if(ticket>0){
                            System.out.println(getName()+"卖出第 "+ticket--+" 张票"); 
     //执行这条语句的同时,共享数据自减
                    }
            }


    同步锁:(对象)
    是否可以锁住代码块,要看这几个需要同步的线程是否是在使用同一把锁!!如果是同一把锁,则可以锁住。起到同步的效果
    //线程锁
    java1.5版本前 ReentrantLock 效率高,不过现在sun优化了 Synchronized底层实现,现在效率差不多。

    public class ReentrantLockextends Objectimplements Lock, Serializable
    一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 
    public class SellTicket implements Runnable {
            Object object=new Object();
            ReentrantLock lock=new ReentrantLock();  //一个可重入的互斥锁 Lock
            int ticket=100;
            public void run() {
                            while(ticket>0){
                                    //synchronized(object){ 
                                    lock.lock();
                                            if(ticket>0){
                                                    System.out.println(Thread.currentThread().getName()+"卖出第 "+ticket--+" 张票");
                                            }       
                                    lock.unlock();
                          //}                       
                      }
            }
    }









  • 相关阅读:
    1. 马尔科夫决策过程
    梯度下降法、随机梯度下降法、小批量梯度下降法
    计算曲线与坐标轴的面积
    鼠标进入,显示div
    codewar
    Django firstDay
    C#学习之关于lock
    winfrom 界面中表格数据修改及刷新(DEV)
    SVN 分支合并 版本控制
    wpf 绑定非元素对象
  • 原文地址:https://www.cnblogs.com/meihao1203/p/9181788.html
Copyright © 2020-2023  润新知