/* 编写3个线程分别实现各自飞运行时间,第一个线程每隔1秒运行一次,第二每隔5秒第三个每隔10秒 */

题目:有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕上循环打印10次ABCABC… -
- ITeye技术网站
博客分类:
题目:有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕上循环打印10次ABCABC…方法一:使用wait()、notify()控制打印次序
public class Test {
public static Object a = new Object();
public static Object b = new Object();
public static Object c = new Object();
public class Runner1 implements Runnable {
public void run() {
for (int i = 0; i & 10; i++) {
synchronized (a) {
// System.out.println("a is locked by t1");
synchronized (b) {
// System.out.println("b is locked by t1");
System.out.print("A");
b.notify();
// System.out.println("t1 notify b");
if (i & 9) {
} catch (InterruptedException e) {
e.printStackTrace();
public class Runner2 implements Runnable {
public void run() {
for (int i = 0; i & 10; i++) {
synchronized (b) {
// System.out.println("b is locked by t2");
synchronized (c) {
// System.out.println("c is locked by t2");
System.out.print("B");
c.notify();
// System.out.println("t2 notify c");
if (i & 9) {
} catch (InterruptedException e) {
e.printStackTrace();
public class Runner3 implements Runnable {
public void run() {
for (int i = 0; i & 10; i++) {
synchronized (c) {
// System.out.println("c is locked by t3");
synchronized (a) {
// System.out.println("a is locked by t3");
System.out.print("C");
a.notify();
// System.out.println("t3 notify a");
if (i & 9) {
} catch (InterruptedException e) {
e.printStackTrace();
public static void main(String[] args) {
Test t = new Test();
Thread t1 = new Thread(t.new Runner1(), "t1");
Thread t2 = new Thread(t.new Runner2(), "t2");
Thread t3 = new Thread(t.new Runner3(), "t3");
t1.start();
Thread.sleep(1);
} catch (InterruptedException e1) {
e1.printStackTrace();
t2.start();
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
t3.start();
方法二:使用管道流在进程间传递消息控制打印次序
import java.io.*;
class RunnerA implements Runnable{
DataInputStream disA=
DataOutputStream dosA=
public RunnerA(PipedInputStream pisA,PipedOutputStream posA){
disA=new DataInputStream(pisA);
dosA=new DataOutputStream(posA);
public void run(){
for(int i=0;i&10;i++){
System.out.print("A");
dosA.writeChar('A');
}else if(i==9){
char c=disA.readChar();
System.out.print("A");
dosA.writeChar('O');
char c=disA.readChar();
System.out.print("A");
dosA.writeChar('A');
}catch(IOException e){
e.printStackTrace();
class RunnerB implements Runnable{
DataInputStream disB=
DataOutputStream dosB=
public RunnerB(PipedInputStream pisB,PipedOutputStream posB){
disB=new DataInputStream(pisB);
dosB=new DataOutputStream(posB);
public void run(){
char c=disB.readChar();
while(true){
if(c=='O'){
System.out.print("B");
dosB.writeChar('O');
if(c=='A'){
System.out.print("B");
dosB.writeChar('B');
c=disB.readChar();
}catch(IOException e){
e.printStackTrace();
class RunnerC implements Runnable{
DataInputStream disC=
DataOutputStream dosC=
public RunnerC(PipedInputStream pisC,PipedOutputStream posC){
disC=new DataInputStream(pisC);
dosC=new DataOutputStream(posC);
public void run(){
char c=disC.readChar();
while(true){
if(c=='O'){
System.out.print("C");
if(c=='B'){
System.out.print("C");
dosC.writeChar('C');
c=disC.readChar();
}catch(IOException e){
e.printStackTrace();
public class Test{
public static void main(String[] args){
PipedOutputStream posA=new PipedOutputStream();
PipedInputStream pisA=new PipedInputStream();
PipedOutputStream posB=new PipedOutputStream();
PipedInputStream pisB=new PipedInputStream();
PipedOutputStream posC=new PipedOutputStream();
PipedInputStream pisC=new PipedInputStream();
pisA.connect(posC);
pisB.connect(posA);
pisC.connect(posB);
}catch(IOException e){
e.printStackTrace();
Thread ta=new Thread(new RunnerA(pisA,posA),"ta");
Thread tb=new Thread(new RunnerB(pisB,posB),"tb");
Thread tc=new Thread(new RunnerC(pisC,posC),"tc");
ta.start();
tb.start();
tc.start();
浏览: 4341 次
来自: 太原【图文】第05章 Java中的多线程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第05章 Java中的多线程
上传于|0|0|文档简介
&&第05章 Java中的多线程
大小:44.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 各自飞 的文章

 

随机推荐