多线程信息共享-synchronized

多线程信息共享-加锁

  • 关键步骤加锁限制
    – 互斥:某一个线程运行一个代码段(关键区),其他线程不能同时运行这个代码段
    – 同步:多个线程的运行,必须按照某一种规定的先后顺序来运行
    – 互斥是同步的一种特例
  • 互斥的关键字是synchronized
    – synchronized代码块/函数,只能一个线程进入
    – synchronized加大性能负担,但是使用简便
/**
 * @ClassName:ThreadDemo3
 * @Description:
 * @author: Torey
 */
public class ThreadDemo3 {
    public static void main(String[] args){
       // TestThread3 t = new TestThread3();
        TestThread3 t = new TestThread3();
        new Thread(t,"Thread-0").start();
        new Thread(t,"Thread-1").start();
        new Thread(t,"Thread-2").start();
        new Thread(t,"Thread-3").start();
    }
}
class TestThread3 implements Runnable{
    //多个线程共享一个变量
private volatile int tickets=100;
private static Object o=new Object();
    public void run() {
        while (true){
            //同步代码块  这里同步代码块与同步函数可以只用其中一个,效果是一样的
            synchronized (o){
                sale();
            }
            try{
                Thread.sleep(100);
            }catch (Exception ex){
                ex.printStackTrace();
            }
            if (tickets<=0) {
                break;
            }
        }
    }
//同步函数  这里同步代码块与同步函数可以只用其中一个,效果是一样的
    private synchronized void sale() {
        if (tickets>0) {
            System.out.println(Thread.currentThread().getName() + " is saling ticket " + (tickets--));
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值