package com.wubuku.mytest;
public class ThreadingExample {
public static void main(String args[]) {
Thread[] threads = new Thread[2];
for (int count = 0; count < threads.length; count++) {
threads[count] = new ThreadCounter(count);
threads[count].start();
}
}
private static class ThreadCounter extends Thread {
/**
* 在没有同步的情况下,这个方法会打印出不定顺序的数字
*/
public static void count() {
for (int count = 1; count <= 5; count++)
System.out.print(count + " ");
}
public static Object synchronizeVariable = "locking variable";
private int threadNo;
public ThreadCounter(int threadNo) {
this.threadNo = threadNo;
}
public void run() {
countWithSync();
}
/**
* 在有同步的情况下,能打印出这样顺序的数字: 1 1 2 2 3 3 4 4 5 5
*/
private void countWithSync() {
synchronized (synchronizeVariable) {
for (int count = 1; count <= 5; count++) {
System.out.println("[thread_" + threadNo + " print:]"
+ count + " ");
synchronizeVariable.notifyAll();
if (count < 5) {
System.out.println("[thread_" + threadNo
+ " sleep zzz...] ");
try {
synchronizeVariable.wait();
} catch (InterruptedException error) {
}
System.out.println("[thread_" + threadNo + " wakup!] ");
}
}
}
}
}
}