java中每个对象都会有一个对象锁,而synchronized就是得到这个锁,看下面这个例子 无论执行多少次都是有序的,两个线程操作的是同一个对象,第一个执行的线程得到了锁,第二个线程只能等第一个线程执行完了才能拿到锁,进入方法。 再看下面这个例子 执行的结果是无序的,两个对象,两把锁,故互不影响, ...
分类:
编程语言 时间:
2017-05-22 12:05:16
阅读次数:
138
(网上的答案:sleep是线程类(Thread)的方法,导致此线程暂停运行指定时间,将运行机会给其它线程。可是监控状态依旧保持,到时后会自己主动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,仅仅有针对此 ...
分类:
编程语言 时间:
2017-05-09 09:36:25
阅读次数:
178
201521123045 <java程序设计>第11周学习总结 1. 本周学习总结 2. 书面作业 2. 书面作业 Q1.1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问) 1.2 同步代码块与同步方法有何区别? 1.3 实现互斥访问的原理是什么?请使用对象锁概念并结合相应的代码块 ...
分类:
编程语言 时间:
2017-05-06 20:50:50
阅读次数:
147
最近在学习多线程,现在进行总结一下吧。首先要了解一下以下几个名词。 (1)wait:当线程调用wait()方法时,当前该线程会进入阻塞状态,且释放锁,使用wait方法的时候,必须配合synchronized使用。 (2)notify:当线程调用notify()方法时,会唤醒一个处于等待该对象锁的线程 ...
分类:
编程语言 时间:
2017-04-04 19:04:15
阅读次数:
255
同步 要想实现同步操作,必须要获得线程的对象锁。获得它可以保证在同一时刻只有一个线能够进入临界区,并且在这个锁被释放之前,其他的线程都不能再进入这个临界区。如果其他线程想要获得这个对象的锁,只能进入等待队列等待。只有当拥有该对象锁的线程退出临界区时,锁才会被释放,等待队列中优先级最高的线程才能获得该 ...
分类:
其他好文 时间:
2017-03-31 13:06:33
阅读次数:
140
关于wait和notify的用法,网上已经有很多详细解释了,我只是简单的总结下。 总结: wait和notify通常和synchronized(obj)一起用,注意obj应该是多线程共用的同一个对象(即多线程状态下各个线程要竞争这个对象锁),如果不是同一个对象,那么就不能控制并发了,wait和not ...
分类:
编程语言 时间:
2017-03-30 19:19:37
阅读次数:
149
运行结果: 注释掉49行的“test1.class.notify();” 程序会一直处于挂起状态: sleep()方法属于Thread类;wait()方法属于Object类。 在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待 ...
分类:
编程语言 时间:
2017-03-20 21:59:59
阅读次数:
148
1.1概述——文件锁 文件锁定初看起来可能让人迷惑。它 似乎 指的是防止程序或者用户访问特定文件。事实上,文件锁就像常规的 Java 对象锁 — 它们是 劝告式的(advisory) 锁。它们不阻止任何形式的数据访问,相反,它们通过锁的共享和获取赖允许系统的不同部分相互协调。 您可以锁定整个文件或者 ...
分类:
编程语言 时间:
2017-03-09 19:46:41
阅读次数:
300
Java5的线程并发库中,提供了相应的线程锁接口Lock来帮助我们同步处理。Lock比传统线程模型中的synchronized更加面向对象,锁本身也是一个对象,两个线程执行的代码要实现同步互斥效果,就要使用同一个锁对象。锁要上在要操作的资源类的内部方法中,而不是线程代码中。 java.util.co ...
分类:
编程语言 时间:
2017-03-08 18:49:49
阅读次数:
239
线程的同步使用synchronized不使用stop和suspend方法进行线程的同步,stop不安全,会释放所有的锁定,suspend方法容易发生死锁,所以不能使用。 wait方法会让线程进入等待状态,放弃对象锁,只有对它发出notify才能唤醒。如果数据在线程之间进行共享那么我们编写的线程就必须 ...
分类:
编程语言 时间:
2017-03-03 22:20:49
阅读次数:
181