黑马程序员技术交流社区
标题:
关于多线程的成员变量,局部变量的分析
[打印本页]
作者:
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