public class SynchronizendTest1 implements Runnable { int b = 10;
public synchronized void m1() throws Exception {
b=1000;
Thread.sleep(3000);
System.out.println("b="+b);
}
public void m2(){
System.out.println(b);
}
public void run(){
try{
m1();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String args[]) throws Exception{
SynchronizendTest1 st1=new SynchronizendTest1();
Thread t=new Thread(st1);
t.start();
Thread.sleep(1000);
st1.m2();
}
}结果:1000
b=1000。
问题就出现在我把主方法里的Thread.sleep(1000)取消,则结果:10 b=1000.
m1()方法已经是同步方法了。执行到Thread.sleep(3000); b都等于1000了。是这样吗?和主方法里的Thread.sleep(1000)有什么关系 ???
public synchronized void m1() throws Exception {
b=1000;
Thread.sleep(3000);
System.out.println("b="+b);
}
public void m2(){
System.out.println(b);
}
public void run(){
try{
m1();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String args[]) throws Exception{
SynchronizendTest1 st1=new SynchronizendTest1();
Thread t=new Thread(st1);
t.start();
Thread.sleep(1000);
st1.m2();
}
}结果:1000
b=1000。
问题就出现在我把主方法里的Thread.sleep(1000)取消,则结果:10 b=1000.
m1()方法已经是同步方法了。执行到Thread.sleep(3000); b都等于1000了。是这样吗?和主方法里的Thread.sleep(1000)有什么关系 ???
解决方案 »
- 1. 怎么把两个字符串的值交换 而不使用中间变量
- 求助,Swing实现两点连线的问题,谢谢
- 请问JAVA桌面程序怎么打成包括运行环境的安装包??
- 请英雄赐教,关于"伺候器遇到了阻止它实现这一个请求的一个内在的错误 () 。"
- 用Eclipse3.1.2+tomcat4.1+lomboz写jsp时的问题!
- 很费解的题目大家帮着看看
- decimalformat的默认格式
- equals和==有什么区别?迷惑中.
- 怎么从ArrayList<Object>中取出boolean类型的值?
- 新手求解怎么解决下面这个异常啊
- java 求助 关于线程的同步问题
- java.lang.ClassNotFoundException: com.chat.common.User错误,求大神帮忙看看
public class SynchronizedTest1 implements Runnable { volatile int b = 10;
CountDownLatch cd = new CountDownLatch(1);
public void m1() throws Exception {
b = 1000;
cd.countDown();
Thread.sleep(3000);
System.out.println("b=" + b);
} public void m2() {
System.out.println(b);
} @Override
public void run() {
try {
m1();
}
catch(Exception e) {
e.printStackTrace();
}
} public static void main(String args[]) throws Exception {
SynchronizedTest1 st1 = new SynchronizedTest1();
Thread t = new Thread(st1);
t.start();
st1.cd.await();
st1.m2();
}
}