[size=large]通过卖票来进行解释:
1.ThreadTicket.java:
Java代码
public static void main(String[] args) {
// sell1();
sell2();
}
public static void sell2() {
MyRunnable mt = new MyRunnable();
new Thread(mt).start();// 同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();// 个实例化对象mt,就会出现异常
new Thread(mt).start();
}
public static void sell1() {
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();// 每个线程都各卖了10张,共卖了30张票
mt2.start();// 但实际只有10张票,每个线程都卖自己的票
mt3.start();// 没有达到资源共享
}
public static void main(String[] args) {
// sell1();
sell2();
}
public static void sell2() {
MyRunnable mt = new MyRunnable();
new Thread(mt).start();// 同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();// 个实例化对象mt,就会出现异常
new Thread(mt).start();
}
public static void sell1() {
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();// 每个线程都各卖了10张,共卖了30张票
mt2.start();// 但实际只有10张票,每个线程都卖自己的票
mt3.start();// 没有达到资源共享
}
2.MyThread.java:
Java代码
public class MyThread extends Thread {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}
public class MyThread extends Thread {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}
3.MyRunnable.java:
Java代码
public class MyRunnable implements Runnable {
private int ticket = 10;
@Override
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
} [/size]
1.ThreadTicket.java:
Java代码
public static void main(String[] args) {
// sell1();
sell2();
}
public static void sell2() {
MyRunnable mt = new MyRunnable();
new Thread(mt).start();// 同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();// 个实例化对象mt,就会出现异常
new Thread(mt).start();
}
public static void sell1() {
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();// 每个线程都各卖了10张,共卖了30张票
mt2.start();// 但实际只有10张票,每个线程都卖自己的票
mt3.start();// 没有达到资源共享
}
public static void main(String[] args) {
// sell1();
sell2();
}
public static void sell2() {
MyRunnable mt = new MyRunnable();
new Thread(mt).start();// 同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();// 个实例化对象mt,就会出现异常
new Thread(mt).start();
}
public static void sell1() {
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();// 每个线程都各卖了10张,共卖了30张票
mt2.start();// 但实际只有10张票,每个线程都卖自己的票
mt3.start();// 没有达到资源共享
}
2.MyThread.java:
Java代码
public class MyThread extends Thread {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}
public class MyThread extends Thread {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}
3.MyRunnable.java:
Java代码
public class MyRunnable implements Runnable {
private int ticket = 10;
@Override
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
} [/size]