同步锁
本帖最后由 宁程大大 于 2019-10-16 18:38 编辑public class WindowTest {
public static void main(String[] args) {
Window w = new Window();
Thread t1 = new Thread(w, "窗口一");
Thread t2 = new Thread(w, "窗口二");
Thread t3 = new Thread(w, "窗口三");
t1.start();
t2.start();
t3.start();
}
}
class Window implements Runnable {
private int ticket = 100;
Object obj = new Object();
@Override
public void run() {
while (true) {
synchronized (obj) {
if (ticket > 0) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + ticket);
ticket--;
}else{
break;
}
}
}
}
}
加了锁,不就是想 一个线程执行,不想让其他线程执行嘛。你的问题应该是 ticket 把 值消耗完了,而已 后面 窗口2 和 窗口3 没有执行。。。建议 学会 debug 再提问。 你这只创建了一个Window ,那就是已有一个object,只有一个线程能拿到锁 Ca1m_01 发表于 2019-10-16 17:54
加了锁,不就是想 一个线程执行,不想让其他线程执行嘛。你的问题应该是 ticket 把 值消耗完了,而已 后面...
怎么让它们同时执行呢 宁程大大 发表于 2019-10-16 18:01
怎么让它们同时执行呢
最简单的,你创建3个window对象,就同时执行了 不要加锁啊啊啊啊啊 a yaoshihao 发表于 2019-10-16 18:03
最简单的,你创建3个window对象,就同时执行了
那就变成300张票了 你跟哪里学的 代码,去看例子 Ca1m_01 发表于 2019-10-16 18:05
你跟哪里学的 代码,去看例子
这就是源码,他那里可以跑出三个窗口 不打辩论。一共就没多少代码,别人可以,你不可以。那就找自己的问题。
页:
[1]
2