您的位置:首页 > 编程语言 > Java开发

Java多线程编程--(5)Java多线程互斥小例子

2014-09-26 14:40 302 查看
前几篇写了Java从出生就支持的多线程的一些技术,打算往后就写一下Java 5.0新推出的多线程编程相关的包和类,今天就写一个小例子作为老技术部分的小结吧。上题:

“A线程循环n次输出语句,然后B线程循环m次输出语句,然后再由A线程循环n次输出语句,B循环m次输出语句.....如此反复50次即可。”

[java] view
plaincopy

package cn.test;

public class ThreadExclusiveTest {

public static void main(String[] args) {

final ThreadTask tt = new ThreadTask();

new Thread(new Runnable(){

@Override

public void run() {

int i = 0;

while(i<50){

tt.firstTask(100, 0, i+1);

i++;

}

}

}, "B线程").start();

new Thread(new Runnable(){

@Override

public void run() {

int i = 0;

while(i<50){

tt.firstTask(10, 1, i+1);

i++;

}

}

}, "A线程").start();

}

}

/**

* 线程执行任务类,其中封装了线程需要执行的所有任务,各个任务之间的互斥在该类中进行处理!

*/

class ThreadTask {

private int controller = 0;

/**

* 第一任务:线程的具体执行逻辑。

* @param executeTimes 输出次数

* @param ctrlWaitValue 线程等待的控制值

* @param executeTimes

*/

public synchronized void firstTask(int executeTimes, int ctrlWaitValue, int loopTime){

while(controller%2 == ctrlWaitValue){

try {

wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

for(int i=0; i<executeTimes; i++){

System.out.println(Thread.currentThread().getName() + " 开始第 " + i + " 次执行!第 " +loopTime+" 主循环!");

}

controller++;

notifyAll();

}

}

上例中,将题目中的任务封装在类ThreadTask的方法firstTask中,测试类中,A线程先循环10次,B线程循环50次,然后A在循环10次,依次进行50次,结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: