线程级按序输出

该博客展示了Java中使用synchronized关键字进行线程同步和通过wait/notify实现线程间通信的实例。代码创建了三个线程,每个线程按照特定顺序打印字符,并在打印完成后退出。示例中,线程间的同步和通信确保了输出的顺序性和一致性。
摘要由CSDN通过智能技术生成

预期输出:
ABABABABAB

public class MyThread implements Runnable {     
    private String name;     
    private Object prev;     
    private Object self;     
    private MyThread(String name, Object prev, Object self) {     
        this.name = name;     
        this.prev = prev;     
        this.self = self;     
    }     
    public void run() {     
        int count = 5;     
        while (count > 0) {     
            synchronized (prev) {     
                synchronized (self) {     
                    System.out.print(name);     
                    count--;    
                    self.notify();     
                }     
                try {     
                    prev.wait();     
                } catch (InterruptedException e) {     
                    e.printStackT\frace();     
                }     
            }     
        }    
        System.exit(0);//退出jvm  
    }     
    public static void main(String[] args) throws Exception {     
        Object a = new Object();     
        Object b = new Object();     
        MyThread ta = new MyThread("A", b, a);     
        MyThread tb = new MyThread("B", a, b);     
        new Thread(ta).start();  
        Thread.sleep(100);  //确保按顺序A、B执行  
        new Thread(tb).start();  
        Thread.sleep(100);    
        }     
}  

预期输出:
EDUEDUEDUEDUEDU

public class MyThread implements Runnable {   
    private String name;
    private Object prev;
    private Object next;
    private Object self;

    private MyThread(String name, Object next, Object prev, Object self)
    {
        this.name = name;
        this.prev = prev;
        this.next = next;
        this.self = self;
    }

    public void run()
    {
        int count = 5;
        while (count > 0)
        {
            synchronized(prev) {
                synchronized(self) {
                    System.out.print(name);
                    count--;
                    self.notify();
                }
                try{
                    prev.wait();
                }
                catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        }
        System.exit(0);
    }

	   //请在此添加实现代码
/********** Begin **********/
 public static void main(String[] args) throws Exception {   
        Object a = new Object();
        Object b = new Object();
        Object c = new Object();

        MyThread ta = new MyThread("E", b, c, a);
        MyThread tb = new MyThread("D", c, a, b);
        MyThread tc = new MyThread("U", a, b, c);

        new Thread(ta).start();
        Thread.sleep(100);
        new Thread(tb).start();
        Thread.sleep(100);
        new Thread(tc).start();
        Thread.sleep(100);
    }   

/********** End **********/ 
}

预期输出:

JavaThreadAA
JavaThreadBB
JavaThreadCC
JavaThreadAA
JavaThreadBB
JavaThreadCC
JavaThreadAA
JavaThreadBB
JavaThreadCC
JavaThreadAA
JavaThreadBB
JavaThreadCC
JavaThreadAA
JavaThreadBB
JavaThreadCC

package step1;

public class Task {
	public static void main(String[] args) throws Exception {
		/********* Begin *********/
		//在这里创建线程, 开启线程
		Object a = new Object();
		Object b = new Object();
		Object c = new Object();

		MyThread ta = new MyThread("AA", b,c,a);
		MyThread tb = new MyThread("BB", c, a, b);
		MyThread tc = new MyThread("CC", a, b, c);
		
		ta.start();
		Thread.sleep(100);
		tb.start();
		Thread.sleep(100);
		tc.start();
		Thread.sleep(100);


		/********* End *********/
	}
}

class MyThread extends Thread {
	/********* Begin *********/
	
	
	String threadName;
	private Object prev;
	private Object next;
	private Object self;

	public MyThread(String threadName, Object next, Object prev, Object self)
	{
		this.threadName = threadName;
		this.prev = prev;
		this.next = next;
		this.self = self;
	}

	public void run() {
	
		int count = 5;
		
		while(count > 0){
			
			synchronized(prev) {
				synchronized (self) {
					System.out.println("Java Thread" + this.threadName);
					count--;
					self.notify();
				}
				try{
					prev.wait();
				}
				catch(InterruptedException e)
				{
					e.printStackTrace();
				}
			}

			
		}
		System.exit(0);
	}

	/********* End *********/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值