多线程 通过 公共数据区 协调运行:
每个线程打印同1个字母,多个线程轮流打印,
代码:
package test;
public class LetterPrinter extends Thread {
public static final char[] cs = new char[] { 'h', 'e', 'l', 'l', 'o', ',' };
/** 指定当前可以运行的线程的 index 属性值,相当于公共数据区,用于协调多个线程 */
public static int CURRENT_INDEX = 0;
private int index;
private int count = 5;
public LetterPrinter(int index) {
this.index = index;
}
public void run() {
while (count > 0) {
if (index == CURRENT_INDEX) { // 如果轮到了当前线程,则执行打印,否则不打印
printLetter();
count--;
}
// 让出资源,让其他线程运行
Thread.yield();
}
}
/** 打印,该方法是同步的,同1时间只能有1个线程访问,该方法设置了公共数据区的值,以协调各线 */
public synchronized void printLetter() {
System.out.print(cs[index]);
CURRENT_INDEX = (index == (cs.length - 1) ? 0 : index + 1);
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public static void main(String[] args) {
for (int i = 0; i < cs.length; i++) {
new LetterPrinter(i).start();
}
}
}