A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏亮 中级黑马   /  2012-9-14 10:12  /  1108 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 魏亮 于 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--);
                        }
                }
        }
}
编译时的错误报告是   错误: 进行语法分析时已到达文件结尾
自己找了半天没找出来,请大家帮忙看看



4 个回复

倒序浏览
把while(true)放到同步块里面试试行不行
回复 使用道具 举报
楼主你能告诉我错误在那吗?我运行了N篇,没发现任何错误
回复 使用道具 举报
死锁:同步中嵌套同步,而锁却不同,就会出现死锁。
我给你一个完整的死锁程序
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();
}
}
回复 使用道具 举报
刚有测试一下没问题了,应该是我存错文件夹了,结果运行了以前写的那个程序了。
还是谢谢上面各位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马