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();
来定义两个线程 区别在哪
为什么一个实现了同步 一个没实现??
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();
来定义两个线程 区别在哪
为什么一个实现了同步 一个没实现??
到run的时候用的是同一个t
一个线程sleep了另外一个醒来继续自增后者是不同的空间
他们的t没有联系,所以会打印两次而我觉得同步的意思就是,我(thread)在运行的时候,别人都不能打扰我
但一旦我停下来了别人就有机会进来了因为第一个用了同样的mt,所以用了同样的t,最后结果看起来好像是异步在操作
而第二个因为是不同的内存空间,所以不会造成这样的假象
private static final Object lock = new Object();
....
synchronized (lock)
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();
的区别是什么呢
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