一个java编程小问题。。。关于线程同步的小小问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 13:30:56
package yang.Thread;
/**
*
* 一个关于线程同步的测试,num执行过程被其他进程打断。导致输出错误
*
*/
public class TestThreadSync {

/**
* @param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
RunImp2 ri=new RunImp2();
Thread thread1=new Thread(ri);
Thread thread2=new Thread(ri);
//为线程命名
thread1.setName("thread1");
thread2.setName("thread2");
//开始两个进程
thread1.start();
thread2.start();
}

}
class RunImp2 implements Runnable{
Timer timer=new Timer();
public void run(){
timer.addNum(Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName());
}
}
class Timer{
private static int num=0;
public void addNum(String name){
synchronized(this){
num++;
try{
Thread.sleep(1000);
}catch(Interrup

首先可以肯定的是当在run()中声明并创建是,那么新创建的对象就相当于run()的局部变量了,每个线程都会新建一个所以两个线程输出的num的值是相等的,但是为什么有时输出2我就不知道了,按上面说的应该是每次都是从0开始自加的啊……
期待高手给出更正确的答案,持续关注中……