黑马程序员技术交流社区

标题: 请大家帮忙找下代码中的错误 [打印本页]

作者: 魏亮    时间: 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