public class ThreadTest2 { public static void main(String[] args) {
MyThread mt = new MyThread();
new Thread(mt).start();
new Thread(mt).start();// MyThread mt1 = new MyThread();
// MyThread mt2 = new MyThread();
// mt1.start();
// mt2.start();
}
}class MyThread extends Thread {
int t = 1; public void run() {
while (true) {
synchronized (this) {
if (t <= 10) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println(t + "  from "
+ Thread.currentThread().getName());
t++;
}
}
}
}
}我用MyThread mt = new MyThread();
new Thread(mt).start();
new Thread(mt).start();
来定义 和
用MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
mt1.start();
mt2.start();
来定义两个线程 区别在哪
为什么一个实现了同步 一个没实现??

解决方案 »

  1.   

    前者用的是同一个实例
    到run的时候用的是同一个t
    一个线程sleep了另外一个醒来继续自增后者是不同的空间
    他们的t没有联系,所以会打印两次而我觉得同步的意思就是,我(thread)在运行的时候,别人都不能打扰我
    但一旦我停下来了别人就有机会进来了因为第一个用了同样的mt,所以用了同样的t,最后结果看起来好像是异步在操作
    而第二个因为是不同的内存空间,所以不会造成这样的假象
      

  2.   

     synchronized (this) // 因为第一种方法使用的同一个实例,所以this相同,实现同步了一般同步不采用这种方法class MyThread extends Thread {
      private static final Object lock = new Object();
      ....
      synchronized (lock)
      

  3.   

    现在线程问题考虑不多,顶下java2000—net的方法
      

  4.   

    为什么一般不用synchronized(this)这种方法
      

  5.   

    那写成
    MyThread  mt1 = new MyThread();
    MyThread  mt2 = new MyThread(); 
    new   Thread(mt1).start(); 
    new   Thread(mt2).start();

    MyThread mt1 = new MyThread(); 
    MyThread mt2 = new MyThread(); 
    mt1.start(); 
    mt2.start(); 
    的区别是什么呢  
      

  6.   

    “那写成
    MyThread     mt1   =   new   MyThread();
    MyThread     mt2   =   new   MyThread();  
    new       Thread(mt1).start();  
    new       Thread(mt2).start();

    MyThread   mt1   =   new   MyThread();  
    MyThread   mt2   =   new   MyThread();  
    mt1.start();  
    mt2.start();  
    的区别是什么呢”读读这篇文章就知道了。
    http://www.lupaworld.com/bbs/thread-21322-1-1.html