【java】多线程的同步问题

解决线程安全问题

synchronized实现同步处理(加锁处理)

同步代码块

方法中使用synchronized(对象),一般可以锁定当前对象this
表示同一时刻只有一个线程能够进入同步代码块,但是多个线程可以同时进入方法。
同步代码块演示

同步方法

方法声明上加synchronized,表示此时只有一个线程能够进入同步代码块。

同步方法演示

synchronized对象锁概念

synchronized(this)以及普通的synchronized方法只能防止多个线程同时执行同一对象的同步段。也就是说,synchronized锁的是括号里的对象而非代码

全局锁锁代码段
1.使用类的静态同步方法
static synchronized.此时锁得是当前使用的类而非对象
2.在同步代码块中锁当前的class对象
syncjronized(类名称.class){}

synchronized锁多个对象

synchronized(this)以及非static的synchronized方法,只能防止多个线程同时执行同一对象的同步代码段,即synchronized锁住的是括号里的对象,而不是代码。对于非static的synchronized方法,锁的就是对象本身也就是this.
解决
1.锁住同一个对象。synchronized(this).
2.让synchronized锁这个类对应的class对象–全局锁–synchronized(类名.class)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hgelin/article/details/89679908