作家
登录

Java多线程之内置锁与显示锁

作者: 来源: 2017-05-08 15:01:10 阅读 我要评论

Java中具有经由过程Synchronized实现的内置锁,和ReentrantLock实现的显示锁,这两种锁各有各的好处,算是淮竽暌剐弥补,今天就来做一个总结。

Synchronized

内置锁获得锁和释放锁是隐式的,进入synchronized润饰的代码就获得锁,走出响应的代码就释放锁。

synchronized(list){ //获得锁    list.append();    list.count();}//释放锁

通信

与Synchronized配套应用的通信办法平日有wait(),notify()。

下面用两种锁分别实现的线程安然的linkedlist:

wait()办法会急速释放当前锁,并进入等待状况,等待到响应的notify并从新获得锁过后才能持续履行;notify()不会急速急速释放锁,必须要等notify()地点线程履行完synchronized块中的所有代码才会释放。用如下代率攀来进行验证:

public static void main(String[] args){    List list = new LinkedList();    Thread r = new Thread(new ReadList(list));    Thread w = new Thread(new WriteList(list));    r.start();    w.start();}class ReadList implements Runnable{    private List list;    public ReadList(List list){ this.list = list; }    @Override    public void run(){        System.out.println("ReadList begin at "+System.currentTimeMillis());        synchronized (list){            try {                Thread.sleep(1000);                System.out.println("list.wait() begin at "+System.currentTimeMillis());                list.wait();                System.out.println("list.wait() end at "+System.currentTimeMillis());            } catch (InterruptedException e) {                e.printStackTrace();            }        }        System.out.println("ReadList end at "+System.currentTimeMillis());    }}class WriteList implements Runnable{    private List list;    public WriteList(List list){ this.list = list; }    @Override    public void run(){        System.out.println("WriteList begin at "+System.currentTimeMillis());        synchronized (list){            System.out.println("get lock at "+System.currentTimeMillis());            list.notify();            System.out.println("list.notify() at "+System.currentTimeMillis());            try {                Thread.sleep(2000);            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println("get out of block at "+System.currentTimeMillis());        }        System.out.println("WriteList end at "+System.currentTimeMillis());    }}	
			
 1/5    1 2 3 4 5 下一页 尾页

  推荐阅读

  关于Web Workers你需要了解的七件事

介绍Web Workers许可你在后台运行JavaScript代码,而不会阻拦web用户界面。Web Workers可以进步网页的┞符体机能,还可以加强用户体验。Web Workers有两种风格 ——专用Web Wo>>>详细阅读


本文标题:Java多线程之内置锁与显示锁

地址:http://www.17bianji.com/lsqh/35064.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)