本帖最后由 单凯 于 2013-8-16 21:41 编辑
public class Ticket extends Thread {
// 定义100张票
private static int tickets = 100;
public Ticket() {
}
public Ticket(String name) {
super(name);
}
@Override
public void run() {
// 为了模拟次数足够多,用死循环
while (true) {
// 判断如果有票,就卖出票
if (tickets > 0) {
System.out.println(getName() + "正在出售第" + (tickets--) + "张票");
}
}
}
}
public class TicketTest {
public static void main(String[] args) {
// 创建四个线程对象
Ticket t1 = new Ticket("窗口1");
Ticket t2 = new Ticket("窗口2");
Ticket t3 = new Ticket("窗口3");
Ticket t4 = new Ticket("窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
-----------------------------------------------------------------------
public class Ticket implements Runnable {
// 定义100张票
private int tickets = 100;
@Override
public void run() {
// 为了模拟次数足够多,用死循环
while (true) {
// 判断如果有票,就卖出票
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "正在出售第"
+ (tickets--) + "张票");
}
}
}
}
public class TicketTest {
public static void main(String[] args) {
// 创建实现了Runnable接口的子类对象
Ticket t = new Ticket();
// 创建线程对象
Thread t1 = new Thread(t, "窗口1");
Thread t2 = new Thread(t, "窗口2");
Thread t3 = new Thread(t, "窗口3");
Thread t4 = new Thread(t, "窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
-------------------------------------------------
public class Ticket extends Thread {
// 定义100张票
private static int tickets = 100;
public Ticket() {
}
public Ticket(String name) {
super(name);
}
@Override
public void run() {
// 为了模拟次数足够多,用死循环
while (true) {
// 判断如果有票,就卖出票
if (tickets > 0) {
System.out.println(getName() + "正在出售第" + (tickets--) + "张票");
}
}
}
}
public class TicketTest {
public static void main(String[] args) {
// 创建四个线程对象
Ticket t1 = new Ticket("窗口1");
t1.start();
t1.start();
t1.start();
t1.start();
}
}
----------------------------------------------
第二个程序和第三个程序有什么不同吗?第三个程序是使用的一个对象,会出现异常,但是第二个程序使用的也是同一个对象Ticket,如果是通过Thread()方法有重新生成了新的对象
那么private int tickets 应该就是static的啊,被这四个共享才可以是100,但问题是不定义成静态的同样可以被共享,想不明白
|