博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA_Thread_deadlock
阅读量:6720 次
发布时间:2019-06-25

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

package com.kk.thread; /*  * 本类演示死锁的形成  * 基本数据类型是不能作为同步块的参考,例:int b;synchronized(b) */ public class TicketsSystem {
public static void main(String[] args)throws Exception {
SellThread sell=new SellThread(); new Thread(sell).start(); Thread.sleep(1);//让thread1执行,此时b=false; sell.b=true; new Thread(sell).start(); } } class SellThread implements Runnable{
int tickets=1000; Object obj=new Object(); boolean b=false; public void run() {
if (b) {
sell(); }else{
synchronized(obj){ //将obj锁住 while(true){
if (tickets>0) {
try {
Thread.currentThread().sleep(10); } catch (InterruptedException e) {
e.printStackTrace(); } synchronized(this){ //按照本程序的执行顺序,此时this已经被sell方法锁住 System.out.println("obj___"+Thread.currentThread().getName()+"__"+tickets); tickets--; } } } } } } /* * 同步方法会给类的实例加锁(this) * 静态同步方法会给类加锁(Class) */ private synchronized void sell(){ //将类的实例锁住(this) while(true){
if (tickets>0) {
try {
Thread.currentThread().sleep(10); } catch (InterruptedException e) {
e.printStackTrace(); } synchronized(obj){ //等线程苏醒,obj已经被run方法中的synchronized(obj)锁住 System.out.println("this___"+Thread.currentThread().getName()+"__"+tickets); tickets--; } } } } }

转载于:https://www.cnblogs.com/BigIdiot/archive/2011/12/16/2290519.html

你可能感兴趣的文章
稻盛和夫自传读书笔记
查看>>
我的友情链接
查看>>
系统自带sysprep工具重置系统
查看>>
图书推荐:《世界上下五千年大全集》
查看>>
asp.net怎样在URL中使用中文、空格、特殊字符
查看>>
git命令
查看>>
Linux中Yum 出现 Temporary failure in name resolution 解决方案
查看>>
神州数码不同OSPF进程及区域间的通信 实例
查看>>
RHEL AS4下升级oracle10g到10.2.0.3
查看>>
图说:如何给Metro 开始屏幕图标分组
查看>>
HAProxy负载平衡集群
查看>>
junit4使用 (转http://blog.csdn.net/afeilxc/article/details/6218908 )
查看>>
电脑蓝屏--代码0x0000008E
查看>>
mysql主从配置(freebsd+mysql5.5.13)
查看>>
开启win7远程桌面
查看>>
使用fir.im和蒲公英进行测试的一些注意事项
查看>>
我的友情链接
查看>>
Yellow dog
查看>>
Python网络编程之协程
查看>>
趣学Python之弹球游戏第二阶段--向上运动
查看>>