多线程并发


若想解决线程安全问题,需要将线程异步操作变成同步操作。Java 提供了一种内置的锁机制。synchronized 关键字就是 Java 中的同步锁。

synchronized 使用方法:
1.synchronized 修饰非静态方法:同步方法
2.synchronized 修饰静态方法:静态方法锁
3.synchronized 修饰块:同步块锁

线程进入同步代码块之前,会自动获得锁,并且在退出同步代码块的时候会自动释放锁。
无论是通过正常结束,还是通过抛异常结束,都一样释放锁。

即多个线程不能“同时”执行该方法,只能先后顺序的同步执行。这样就会导致该方法从多线程异步操作编程同步操作,简介的解决了线程并发操作所带带来的线程问题。

当方法上使用 synchronized,那么上锁的对象就是当前方法所属的对象也就是 this

4.当一个静态方法上面用 synchronized 修饰,该方法称为静态方法锁。那么该方法锁的对象是当前方法所属的类的对象,即 Class 的实例,每个类有且仅有一个 Class 实例,在该 Class 内部记录了这个类的信息。

5.同步块,使用同步块可以更精确的控制需要执行的代码片段。
可以保证在并发安全的前提下,有效的缩小同步范围,尽可能地提高并发效率。

同步块需要自行制定“同步监视器”,即上锁的对象。
必须保证多个需要同步执行的线程看到的是同一个对象。
通常是 this。

互斥锁

当 synchronized 修饰几段不同代码时,但是同步监视器对象相同时,那么这几段代码就存在互斥关系。即多个线程不能同时执行这几段代码。

死锁


文章作者: CrazyBunQnQ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 CrazyBunQnQ !
 上一篇
计算机网络编程 计算机网络编程
Java 对网络编程提供了支持,在网络编程中使用最多的就是 Socket 编程。两台计算机想要进行网络通信,必须满足一定的规范: 两台计算机需要有一个唯一的标识(ip 地址)。IP 地址 为实现网络中不同计算机之间的通讯,每台计算机必须都
2017-03-27
下一篇 
进程和线程 进程和线程
进程和线程的区别: 进程:进程是操作系统中运行的一个任务(一个应用程序运行在进程中)进程是一块包含了某些资源的内存区域。当操作系统创建一个进程后,该进程会自动申请一个名为主线程的线程。 线程:进程中所包含的一个或多个执行单元称为线程。线程
2017-03-23
  目录