黑马程序员技术交流社区
标题:
实现多线程的两种方式,使用继承Thread类的这种方法???????
[打印本页]
作者:
small_horse
时间:
2015-9-14 00:42
标题:
实现多线程的两种方式,使用继承Thread类的这种方法???????
//使用继承的这种方式实现多线程,加了锁了但是还是出现了同一张票被多个窗口卖的情况呀,何解????代码只提供Mythread类
package cn.itcast3;
class MyThread extends Thread {
// 构造方法
MyThread() {
}
MyThread(String name) {
super(name);
}
private static int num = 10;
Object obj = new Object();
public void run() {
while (true) {
synchronized (obj) { // 加锁了,一次还是卖三张?????????????????????
if (num > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// e.printStackTrace();
}
System.out.println(getName() + "正在出售" + (num--) + "张票");
} else {
System.out.println("没票了!");
break;
}
}
}
}
}
作者:
lion_good
时间:
2015-9-14 07:50
synchronized (obj) ; 每个线程的锁不一样啊 , 应该用同一把锁,比如 synchronized (MyThead.class)
作者:
small_horse
时间:
2015-9-14 23:48
你看这个使用实现接口的方式写的.锁对象是obj就没问题啊,而且变量num也不用修饰.
class MyRunnable implements Runnable {
int num = 100;
Object o = new Object();
public void run() {
while (true) {
synchronized(o){ //锁对象也可以是this 或 MuRunnable.class
if (num > 0) {
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在出售第 "+ num-- + "张票");
}else{ //???? V
System.out.println("没票了!");
break;
}
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2