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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.itheima;

public class DeadThread {

        private static String s = "筷子左";
        private static String s1 = "筷子右";
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                new Thread(new Runnable(){
                        public void run(){
                                while(true){
                                        synchronized(s){
                                                System.out.println("已经拿到筷子左,等待筷子右");
                                                synchronized(s1){
                                                        System.out.println("已经拿到筷子右,开吃");
                                                }
                                        }
                                }
                        }
                }).start();
               
                new Thread(){
                        public void run(){
                                while(true){
                                        synchronized(s1){
                                                System.out.println("已经拿到筷子右,等待筷子左");
                                                synchronized(s){
                                                        System.out.println("已经拿到筷子左,开吃");
                                                }
                                        }
                                }
                        }
                }.start();
        }
}
死锁算是金典了,面试的时候手写代码可能会用到,死锁问题直白来说就是两个人去饭店吃饭,只有一双筷子,结果一人各拿到了一只,互相都想要对方的筷子这样就导致无法吃饭,对应到java中就会产生程序卡死的情况,以上的死锁案例是用匿名对象完成的,使用了两种方法,第一个线程的用的是实现Runnable接口完成的,第二个线程使用继承Thread类完成的。匿名方式虽然看起来复杂,但习惯之后会发现写起来其实很方便。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马