博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程开发之--java多线程学习总结(2)同步代码块
阅读量:5128 次
发布时间:2019-06-13

本文共 1169 字,大约阅读时间需要 3 分钟。

1、第一种解决办法:同步代码块,关键字synchronized

package com.lfy.ThreadsSynchronize;/** * 1、使用同步代码块 * 语法:    synchronized (同步锁) {        //需要同步操作的代码             }     同步锁:为了保证每个线程都能正常的执行原子操作,Java 线程引进了同步机制;同步锁也叫同步监听对象、同步监听器、互斥锁;    Java程序运行使用的任何对象都可以作为同步监听对象,但是一般我们把当前并发访问的共同资源作为同步监听对象         注意:同步锁一定要保证是确定的,不能相对于线程是变化的对象;任何时候,最多允许一个线程拿到同步锁,谁拿到锁谁进入代码块,而其他的线程只能在外面等着*/public class TicketSellSolution1 extends Thread{    private static int num = 50;         public TicketSellSolution1(String string) {        super(string);    }        @Override    public void run() {        for(int i = 0 ; i < 50 ;i ++){            //这里我们使用当前对象的字节码对象作为同步锁            synchronized (this.getClass()) {                if(num > 0){                    try {                        Thread.sleep(10);//模拟卖票需要一定的时间                    } catch (InterruptedException e) {                        // 由于父类的 run()方法没有抛出任何异常,根据继承的原则,子类抛出的异常不能大于父类, 故我们这里也不能抛出异常                        e.printStackTrace();                    }                    System.out.println(Thread.currentThread().getName()+"卖出一张票,剩余"+(--num)+"张");                }            }        }    }}

 

转载于:https://www.cnblogs.com/ZeroMZ/p/9292411.html

你可能感兴趣的文章
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
人物角色群体攻击判定(一)
查看>>
一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(2)--在事件注册表单上创建表单加载规则...
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
MySQL(一)
查看>>
企业级应用与互联网应用的区别
查看>>
steelray project viewer
查看>>
itext jsp页面打印
查看>>
HTTP之报文
查看>>
Perl正则表达式匹配
查看>>
Git
查看>>
DB Change
查看>>
nginx --rhel6.5
查看>>
Eclipse Python插件 PyDev
查看>>
selenium+python3模拟键盘实现粘贴、复制
查看>>
第一篇博客
查看>>