随笔分类 - Java并发
参考书籍:Think in Java
摘要:synchronized关键字主要用于对普通方法,静态方法和代码块 synchronized用于代码块 虽然线程1和线程2都进入了对应的方法开始执行,但是线程2在进入同步块之前,需要等待线程1中同步块执行完成。 对以下代码反编译 得到 每个对象有一个监视器锁(monitor)。synchronize
阅读全文
摘要:CountDownLatch A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. A C
阅读全文
摘要:前面提到,当我们用多线程同时运行多个任务时,可以通过锁(互斥)来同步两个任务的行为,从而使得一个任务不会干涉另一个任务的资源。 这一章要解决的问题不是彼此间的干涉,而是彼此间的协作。协作时,关键问题是握手。为了实现握手,我们同样使用互斥,因为互斥能够确保只有一个任务可以相应某个信号,这样就可以根除竞
阅读全文
摘要:sleep(),wait(),yield() 的区别 sleep方法和yield方法是Thread类的方法,wait方法是Object的方法。 sleep 方法使当前运行中的线程睡眼一段时间,进入不可运行状态,这段时间的长短是由程序设定的,不会释放锁标志。 wait方法调用后,线程会放弃对象锁,进入
阅读全文
摘要:花园入口计数 花园有多个入口,希望统计花园每天的总人数。 在阻塞时终结 上面的例子中,Entrance.run()循环中包含sleep()的调用。sleep()终将被唤醒,任务又返回循环开始的地方判断canceled标志,从而决定是否跳出循环。但是,sleep()下,它使任务变为阻塞,而我们有时候需
阅读全文
摘要:本章主要讲如何解决访问共享资源时的竞争问题。 其中关于synchronized关键子,显式lock锁等详细内容看我写的这篇文章。 下面主要讲原子类、临界区和线程本地存储: 原子类 J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronize
阅读全文
摘要:定义任务 描述一个任务,使用Runnable接口,实现其run方法即可。以下为一个倒计时的任务,打印倒计时以及任务的ID。 Thread.yield()的调用是对线程调度器的一种声明:当前线程已经完成生命周期中的最重要的部分,现在可以切换给其他任务执行一段时间了。 A hint to the sch
阅读全文