这是一道多线程的算法,直接使用类似于生产者消费者模式的算法就行.
输出一次之后先唤醒其他线程,然后就调用wait方法,释放锁.另一个线程就会获取锁,并打印,重复上述流程.
如果要求某个线程先打印,可以在第一个线程启动之后,睡眠100ms再启动第二个线程,这样第一个线程就一定打印第一个数据.(当然我没加睡眠也一直是先启动的线程先打印,不知道是不是概率问题)
挺简单的,看代码应该都能懂.
源码:
package leetcode;
public class JiaoTiDaYin {
public static void main(String[] args) {
Dayin dayin=new Dayin();
Thread t1=new Thread(dayin);
Thread t2=new Thread(dayin);
t1.setName("第一个");
t2.setName("第二个");
t1.start();
// try {
//需要的话就用,用上可能会更保险一点
// Thread.currentThread().sleep(500);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
t2.start();
}
}
class Dayin implements Runnable{
int i=1;//要打印的数据
public void print(){
System.out.println(Thread.currentThread().getName()+"====="+i);
}
@Override
public void run() {
while (i<=100){
synchronized (this){//加锁,防止一开始两个线程都进入进行打印
print();//打印数据
i++;
notify();//唤醒另外一个线程
try {
wait(1000);
//等待并释放锁,等另一个线程打印完再唤醒
//这个等待时间可以调,设计这个是为了最后让两个线程都结束
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}