您的位置:首页 > 编程语言 > Java开发

Java核心内库-线程-线程同步-同步代码块

2016-11-30 13:41 183 查看
线程的不安全问题:当多线程并发访问同一个资源对象的时候,可能出现线程不安全的问题。

解决方案:同步代码块、同步方法、锁机制

同步代码块

语法:

synchronized (同步锁){
//需要同步操作的代码
}


同步锁:是一个概念,为了保证每个线程都能正常执行原子操作,Java引入了线程同步机制。

同步监听对象/同步锁/同步监听器/互斥锁

对象的同步锁只是一个概念,可以想象为在对象上标记一个锁。

Java程序允许使用任何对象作为同步监听对象,但是一般我们把当前并发的共同资源作为同步监听对象。

注意:在任何时候,最多允许一个线程拥有同步锁,谁拿到锁就进入代码块,其他的线程只能在外面等着

class Apple1 implements Runnable{
private int num = 50; //苹果总数
@Override
public void run() {
for (int i=0;i<50;i++){
// 同步代码块
synchronized (this){ // this,表示Apple1对象,该对象属于多线程共享的资源
if (num>0){
System.out.println(Thread.currentThread().getName()+"吃了编号为"+num+"的苹果");
try {
Thread.sleep(10); // 此时是为了模拟网络延迟
} catch (InterruptedException e) {
e.printStackTrace();
}
num--;
}
}
}
}
}

public class Main {
public static void main(String[] args){
// 创建三个线程(同学)吃苹果
Apple1 a = new Apple1();
new Thread(a,"小A").start();
new Thread(a,"小B").start();
new Thread(a,"小C").start();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: