多线程基础总结一--synchronized
2010-01-22 00:00:00 来源:WEB开发网核心提示:最近写关于并发的小应用,才发现真的该好好的正视java的多线程了,多线程基础总结一--synchronized,之前没有深入的掌握,用起来也是那么的吃力,多数的初学者都知道Object的 wait(),notify(),作为J2SE里面为数不多的重要难点之一,多线程应用一直是我以敬畏的心态去尽量避开的
最近写关于并发的小应用,才发现真的该好好的正视java的多线程了。之前没有深入的掌握,用起来也是那么的吃力。作为J2SE里面为数不多的重要难点之一,多线程应用一直是我以敬畏的心态去尽量避开的,只是通过一些实例掌握一些简单的应用。这段时间会多用点时间去掌握,有需要写下来的我也会通过这种方式既分享又加深理解。
首先这篇只涉及基础的知识整理,对于并发包java.util.concurrent内的线程池和锁我会看情况在之后的总结中写点东西。对于进程的概念我们都很熟悉,它是应用程序级的隔离,不同的应用程序之间的进程几乎不共享任何资源。而线程则可以说是应用程序内的隔离,一种相对低级别的隔离。一个进程可以有多个线程,它们之间隔离的内容大致包括:a.自身的堆栈,b.程序计数器,c.局部变量;共享应用的内容大致包括:a.内存,b.文件句柄,c.进程状态等。线程不是Java自身的概念,它是操作系统底层的概念。Java作为一种应用语言把线程的操作通过API提升到应用开发的支持,但是在并发性的支持上并不是那么美好。
Java在设计时,每个对象都有一个隐式的锁,这个锁的使用则是通过synchronized关键字来显式的使用。在JDK5.0以后引用了 java.util.concurrent.ReentrantLock作为synchronized之外的选择,配和Condition可以以一种条件锁的机制来管理并发的线程,之后的总结再介绍。提到synchronized,多数的初学者都知道Object的 wait(),notify(),notifyAll()是配和其使用的,但是为什么要在同步内才能用对象的这些方法呢(不然抛 IllegalMonitorStateException)?
赞助商链接