黑马程序员技术交流社区
标题:
请大家帮忙找下代码中的错误
[打印本页]
作者:
魏亮
时间:
2012-9-14 10:12
标题:
请大家帮忙找下代码中的错误
本帖最后由 魏亮 于 2012-9-14 10:54 编辑
/*
死锁。
同步中嵌套同步。
*/
package cn.itcast.thread;
class DeadLockDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
try
{
Thread.sleep(5);
}
catch (Exception e)
{
}
t2.start();
}
}
class Ticket implements Runnable
{
int ticket=100;
boolean flag=true;
Object obj = new Object();
public void run()
{
if (flag)
{
while(true)
{
synchronized(obj)
{
try
{
Thread.sleep(5);
}
catch (Exception e)
{
}
show();
//if(ticket>0)
// System.out.println(Thread.currentThread().getName()+"::"+ticket--);
}
}
}
else
while(true)
show();
}
public synchronized void show()
{
synchronized(obj)
{
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+"::"+ticket--);
}
}
}
}
编译时的错误报告是 错误: 进行语法分析时已到达文件结尾
自己找了半天没找出来,请大家帮忙看看
作者:
李菁
时间:
2012-9-14 10:40
把while(true)放到同步块里面试试行不行
作者:
朱烈葵
时间:
2012-9-14 10:41
楼主你能告诉我错误在那吗?我运行了N篇,没发现任何错误
作者:
李菁
时间:
2012-9-14 10:45
死锁:同步中嵌套同步,而锁却不同,就会出现死锁。
我给你一个完整的死锁程序
class Test implements Runnable {
private boolean flag;
Test(boolean flag){
this.flag=flag;
}
public void run(){
if(flag){
synchronized(MyLock.locka){
System.out.println(“if locka”);
synchronized(MyLock.lockb){
System.out.println(“if lockb”);
}
}
}else{
synchronized(MyLock.lockb){
System.out.println(“else lockb”);
synchronized(MyLock.locka){
System.out.println(“else locka”);
}
}
}
}
}
该类创建两个锁
class MyLock{
static Object locka=new Object();
static Object lockb=new Object();
}
class DeadLockTest{
public static void main(String[] args){
Thread t1=new Thread(new Test(true));
Thread t2=new Thread(new Test(false));
t1.start();
t2.start();
}
}
作者:
魏亮
时间:
2012-9-14 10:52
刚有测试一下没问题了,应该是我存错文件夹了,结果运行了以前写的那个程序了。
还是谢谢上面各位
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2