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

来源:互联网 发布:linux 改权限命令 编辑:程序博客网 时间:2024/06/06 01:52

线程的不安全问题:当多线程并发访问同一个资源对象的时候,可能出现线程不安全的问题。

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

同步代码块

语法:

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();    }}
0 0
原创粉丝点击