日期:2014-05-20  浏览次数:20676 次

一个关于线程的基础问题
遇到一个问题
2个class
ThreadA会打印出6行:每行间隔100ms
1,Thread A
2,Thread A
3,Thread A
4,Thread A
5,Thread A
6,Thread A
ThreadB也会打印出六行:每行间隔100ms
1,Thread B
2,Thread B
3,Thread B
4,Thread B
5,Thread B
6,Thread B

如何使得两个线程有序的打印出来? 先打印完A 在打印B
我想用到synchronised Syste。out 但是具体怎么使用不知道 求解。

------解决方案--------------------
使用wait notify方法 

------解决方案--------------------
wait notify为最佳实现,如果jdk1.5 你可以用 信号量

Java code

package com.ssj.test;

public class NotifySynch {
    private Object lock = new Object();
    class ThreadA extends Thread{
        @Override
        public void run() {
            for(int i = 0 ; i < 6 ; i++){
                System.out.println("ThreadA");
            }
            synchronized(lock){
                    lock.notifyAll();
            }
        }
    }
    
    class ThreadB extends Thread{
        @Override
        public void run() {
            synchronized(lock){
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    
                }
            }
            for(int i = 0 ; i < 6 ; i++){
                System.out.println("ThreadB");
            }
        }
    }
    
    public void testRun(){
        new ThreadB().start();
        new ThreadA().start();
    }
    public static void main(String[] args) {
        new NotifySynch().testRun();
    }
}