![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
无心拾贝
这个作者很懒,什么都没留下…
展开
-
第三章:线程间通信
一句话总结wait和notify: wait使线程停止运行, 而notify使停止的线程继续运行。wait()执行后,线程进入等待线程队列,释放锁。notify()执行后,并不立即释放锁,后面语句要执行完才释放。关键字synchronized可以将任何一个Object作为同步对象看待,JAVA为每一个Object都实现了wait()和notify()方法。 wait()和notify...原创 2018-11-10 21:30:02 · 107 阅读 · 0 评论 -
第四章:Lock的使用
前面讲了使用synchronized来实现线程的同步, 这次使用Lock对象来实现。一个类学学API感觉没啥意思记住一个类ReentranLock类, Lock = new ReentranLock(); lock.lock; …; lock.unlock; 在这之间的代码就能实现同步,跟synchronized的同步代码块一模一样。synchronized + wait()/n...原创 2018-11-10 21:30:44 · 220 阅读 · 0 评论 -
第五章:定时器 Timer
创建一个Timer 就是启动了一个线程,这个线程显然不是守护线程,所以一直运行。停不下来timer.schedule(task, runDate); 在什么时候,做什么事儿。在实例化Timer的时候,把它设置为守护线程。 Timer timer = new Timer(true);计划时间早于当前时间—就立即执行。一个Timer中可以有多个TimeTask, 也许会出现延时,因为前...原创 2018-11-10 21:31:33 · 217 阅读 · 0 评论 -
第六章:单例模式和多线程
单例模式的“饿汉模式” 因为getInstance()方式没有用同步锁,是线程不安全的。public static MyObject getInstance() {try {// 延迟加载if(myObject != null) {// 已经有了}else {//模拟在创建对象之前做一些准备性的工作Thread.sleep(3000);myObject = new MyObj...原创 2018-11-10 21:32:13 · 143 阅读 · 0 评论 -
第七章:拾遗增补
线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中。Thread.State线程各个状态的验证:Thread.currentThread().getState();线程组。线程组的作用是可以批量管理线程或线程组对象,有效地对线程或者线程组对象进行组织。ThreadGroup group = new ThreadGroup();Thread threadA...原创 2018-11-10 21:32:50 · 150 阅读 · 0 评论 -
第一章:多线程---基本API
thread.start() 和 thread.run() 的区别thread.start()方法通知“线程规划器”。就是让系统安排一个时间来调用thread中的run()直接用thread.run() 就不是异步的了,而是同步的,是直接由main线程调用的。线程对象不交个“线程规划器”,必须等run()执行完了,后面的程序才能执行。//线程共享数据MyThreadDataSel...原创 2018-11-09 00:53:39 · 121 阅读 · 0 评论 -
第二章:多线程---对象和变量的并发访问
线程不安全问题存在于“实例变量”中, 如果是方法内部的私有变量,则不存在线程不安全的问题。因为方法内部的变量是私有的,它是随着线程的创建而创建的。关键字synchronized取得的锁都是对象锁,而不是把一段代码或者是方法当做锁。所以哪个线程先执行带synchronized关键字的方法,哪个线程就持有该对象的Lock,其他线程只能等待状态。对于非同步的方法,其他线程仍然可以访问。这...原创 2018-11-09 00:54:42 · 122 阅读 · 0 评论