多线程问题

来源:互联网 发布:网卡mac地址修改 编辑:程序博客网 时间:2024/06/09 17:44
package 卖票示例;
/**
 * 多线程实现卖票 
 * 保证票不重复(关键保证只有一个Ticket实例)
 * 运用多线程同步:前提  多线程中且必须是同一个锁
 * @author 13127
 */
class Ticket implements Runnable {
private int num = 100;// 票总数
Object obj = new Object();
@Override
public void run() {
//一个线程运行时 其他线程不参与运算
while (num>0) {
// //证明存在线程安全问题  一个线程在执行操作共享数据的多调条代码的过程中,其他线程参与了运算
// 就会产生线程安全问题    
//解决问题 同步代码块 synchronized ( 同一个锁) {}
// 在这里表现为票变为负  票一样
synchronized (obj) {
if(num>0)
System.out.println(Thread.currentThread().getName()+"-------sale------->"+num--);
}
}
}
}


public class SaleTicket {
public static void main(String[] args) {
Ticket d = new Ticket();
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
Thread t3 = new Thread(d);
Thread t4 = new Thread(d);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
原创粉丝点击