zoukankan      html  css  js  c++  java
  • 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();
                          //}                       
                      }
            }
    }









  • 相关阅读:
    UML建模之时序图(Sequence Diagram)
    UML统一建模语UML2和EnterpriseArchitect
    FTP服务器的搭建
    Ubuntu下Apache重启错误:Could not reliably determine解决
    JSP的优势 和劣势 与php的比较
    [置顶] Ajax 初步学习总结
    pv ticketlock解决虚拟环境下的spinlock问题
    Tomcat从零开始(十)Loader
    HDU 4740 The Donkey of Gui Zhou (模拟)
    关于cvScalar的那些事
  • 原文地址:https://www.cnblogs.com/meihao1203/p/9181788.html
Copyright © 2011-2022 走看看