加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

同步代码块实现多线程安全售票案例

发布时间:2021-05-20 08:57:18 所属栏目:大数据 来源: https://blog.csdn.net/summoxj
导读:类Tickets实现Runnable接口: /* ?* 采用同步方法形式,解决线程的安全问题 ?* 好处:代码量简洁 ?* 将线程共享数据,和同步,抽取到一个方法中 ?* 在方法的声明上,加入同步关键字 ?* ?* 问题: ?* ?? ??? ?删掉obj,同步方法中还有锁吗?? 肯定有,同步方法
类Tickets实现Runnable接口:

/*
?* 采用同步方法形式,解决线程的安全问题
?* 好处:代码量简洁
?* 将线程共享数据,和同步,抽取到一个方法中
?* 在方法的声明上,加入同步关键字
?*
?* 问题:
?* ?? ??? ?删掉obj,同步方法中还有锁吗?? 肯定有,同步方法中的对象锁,是本类对象引用this
?* ?? ??? ?如果方法是静态的,同步有锁吗?是this吗???? 绝对不是this,锁是本类自己.class属性
?* ?? ??? ?静态方法,同步锁是本类类名.class属性
?*/
public class Tickets implements Runnable {
?? ?
?? ?//定义可以出售的票源
?? ?private static int ticket=100;
?? ?//private Object obj=new Object();
?? ?
?? ?public void run(){
?? ??? ?while(true){
?? ??? ??? ?payTicket();
?? ??? ?}
?? ?}
?? ?
?? ?public static synchronized void payTicket(){
?? ??? ?//对票数判断,大于0,可以出售
?? ??? ??? ?if(ticket>0){
?? ??? ??? ??? ?try{
?? ??? ??? ??? ??? ?Thread.sleep(10);
?? ??? ??? ??? ?}catch(Exception ex){}
?? ??? ??? ??? ?System.out.println(Thread.currentThread().getName()+ "出售第"+ticket--);
?? ??? ??? ?}
?? ?}

}


测试Demo类:

/*
?* 多线程并发访问同一个数据资源
?* 3个线程,对一个票资源,出售
?*/
public class ThreadDemo {
?? ?public static void main(String[] args) {
?? ??? ?//创建Runnable接口实现类对象
?? ??? ?Tickets t=new Tickets();
?? ??? ?//创建3个Thread类对象,传递Runnable接口实现类
?? ??? ?Thread t0=new Thread(t);
?? ??? ?Thread t1=new Thread(t);
?? ??? ?Thread t2=new Thread(t);
?? ??? ?
?? ??? ?t0.start();
?? ??? ?t1.start();
?? ??? ?t2.start();
?? ?}
}



(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读