黑马程序员技术交流社区

标题: 关于多线程的成员变量,局部变量的分析 [打印本页]

作者: Albertups    时间: 2016-12-15 23:30
标题: 关于多线程的成员变量,局部变量的分析
/*不知道大家有没有发现,这个题目,s1,s2既可以定义在main函数内(局部变量),也可以在main函数外(成员变量)
但是其修饰关键字不一样,作为局部变量时:final关键字修饰
作为成员变量时:static关键字修饰.
个人总结了下:1.S1,S2放在main函数内,作为局部变量使用,因为S1,S2是被建立的匿名类对象调用,而局部变量的身份使其生命周期较短,需要用final修饰放到常量池延长生命周期.2.S1,S2放在main函数外,作为成员变量使用,因为main函数是被static修饰的,所以其需要被static修饰(静态方法只能调用静态方法,静态成员)
*/
public class LockDead {

         static String s1 ="筷子左";//main函数为静态,只能访问静态成员,须用static修饰
         static  String s2 ="筷子右";
        public static void main(String[] args) {
                //final  String s1 ="筷子左";//需要被final修饰,被匿名类调用,延长生命周期.
                //final  String s2 ="筷子右";
     new Thread(){
             public void run(){
                     while(true){
                             synchronized (s1) {
                                        System.out.println("获取"+s1+"等待"+s2);
                             synchronized (s2) {
                                     System.out.println(s1+s2+"都有了,开始吃饭");       
                                }
                             }
                     }
             }
     }.start();
     new Thread(){
             public void run(){
                     while(true){
                             synchronized (s2) {
                                        System.out.println("获取"+s2+"等待"+s1);
                               
                             synchronized (s1) {
                                     System.out.println(s1+s2+"都有了,开始吃饭");
                             }
                             }
                     }
             }
     }.start();
        }
}


作者: guojiayuan    时间: 2016-12-16 00:07
哎,都看不懂,大神啥时候交流一下呗!

作者: Albertups    时间: 2016-12-16 00:16
求勾搭^_^

作者: wyh2016    时间: 2016-12-16 00:27
不错,very impressed!!!
作者: Flyxiang    时间: 2016-12-16 07:04
死锁思密达





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2