62,620
社区成员
发帖
与我相关
我的任务
分享class Ticket extends Thread
{
private static int num = 10; //定义成static,2个线程共享10张票。
public void run()
{
while(num>0)
System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
}
}
class Maipiao
{
public static void main(String[] args)
{
Ticket win1 = new Ticket();
Ticket win2 = new Ticket();
win1.start();
win2.start();
}
}

public class Demo {
public static void main(String[] args) {
R r1 = new R();
R r2 = new R();
r1.start();
r2.start();
}
}
class R extends Thread {
private static int num = 10;
public void run() {
minus();
}
public synchronized void minus() {
while (num > 0) {
System.out.println(Thread.currentThread().getName() + "出售第"
+ (num--) + "张票");
}
}
}
运行结果:
Thread1出售第10张票
Thread2出售第9张票
Thread1出售第8张票
Thread2出售第7张票
Thread1出售第6张票
Thread2出售第5张票
Thread1出售第4张票
Thread1出售第2张票
Thread1出售第1张票
Thread2出售第3张票
要对变量进行操作的方法加锁,避免出现线程并发class Ticket1 implements Runnable
{
private int num = 10;
public void run()
{
while(num>0)
System.out.println(Thread.currentThread().getName()+"...sales..."+num--);
}
}
class Maipiao1
{
public static void main(String[] args)
{
Ticket1 t = new Ticket1();
Thread win1 = new Thread(t);
Thread win2 = new Thread(t);
win1.start();
win2.start();
}
}
某次运行结果如下:
Thread-0...sales...10
Thread-1...sales...9
Thread-0...sales...8
Thread-1...sales...7
Thread-0...sales...6
Thread-1...sales...5
Thread-1...sales...4
Thread-1...sales...3
Thread-1...sales...2
Thread-1...sales...1
Thread-0...sales...0
晕,也多买出了一张票,0号票。