public class TestDeadLock implements Runnable {//实现接口,是一个线程类。
public int flag = 1;
static Object o1 = new Object(),o2 = new Object();
String s = "synchronized";
public void run(){
synchronized(s)
{
System.out.println("flag = "+flag);
if(flag==1){
synchronized(o1){//锁定o1
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o2){//再锁住o2
System.out.println("1");
}
}
}
if(flag==0){
synchronized(o2){//锁定o2
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o1){//再锁住o1
System.out.println("0");
}
}
}
}
上面的代码synchronized(s){……}把大括号里的代码锁了,为什么synchronized(this){……}不能?
这个synchronized到底是个什么东东??
我在run()方法前加关键字:public synchronized void run(){……}也不能锁住里面的代码?(输出结果是不对的)
是不是run()方法是接口中定义而重写的,这样加了关键字就不会被执行呢???
这个synchronized到底是怎么回事啊??
public int flag = 1;
static Object o1 = new Object(),o2 = new Object();
String s = "synchronized";
public void run(){
synchronized(s)
{
System.out.println("flag = "+flag);
if(flag==1){
synchronized(o1){//锁定o1
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o2){//再锁住o2
System.out.println("1");
}
}
}
if(flag==0){
synchronized(o2){//锁定o2
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
synchronized(o1){//再锁住o1
System.out.println("0");
}
}
}
}
上面的代码synchronized(s){……}把大括号里的代码锁了,为什么synchronized(this){……}不能?
这个synchronized到底是个什么东东??
我在run()方法前加关键字:public synchronized void run(){……}也不能锁住里面的代码?(输出结果是不对的)
是不是run()方法是接口中定义而重写的,这样加了关键字就不会被执行呢???
这个synchronized到底是怎么回事啊??
解决方案 »
- 求助!java applet 用IE为何打不开?
- 这两个for语句那个执行的更快
- com.adobe.acrobat.Viewer集成进java项目,读pdf图闪屏问题求教
- 求FCKeditor for jsp 中文版
- 关于swing中JTextField限长的问题
- 高手请指教:打包后不能运行!!急
- Applet的問題。拒絕存取?
- 我下载了一个javaSDK,安装成功,请问如何使用?蔡鸟学java
- 在java中,什么情况下属于不同的进程,是在不同的classload中加载的class,还是在不同的jvm中加载的class
- 如何格式化16进制的数?
- 在JFrame中怎么得到 Graphics的对象
- java中吧pripertise的内容读到jlist中
而用synchronized(this){……}就没有锁住,我执行过了,输出结果是不一样的。用String s就起作用了,而用this确实没有用。