美文网首页
实现两个线程交替执行

实现两个线程交替执行

作者: 石头人000 | 来源:发表于2020-10-15 16:03 被阅读0次

今天看到一道面试题,要求实现两个线程交替打印A、B,作为练习,总结一下 代码

public class Info {

    String msg = "A";
    boolean flag = false;//交替执行标志
}

线程A

**
 * 线程A,负责打印A
 * Created by DONGSHILEI on 2017/10/17
 */
public class ThreadA implements Runnable{
    private Info info;

    public ThreadA(Info info) {
        this.info = info;
    }

    @Override
    public void run() {
        while (true){
            synchronized (info){
                if (!info.flag){
                    try {
                        //线程等待
                        info.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    System.out.println(Thread.currentThread().getName()+"--"+info.msg);
                    info.flag = false;
                    info.msg = "B";
                    //唤醒等待info的线程,选择一个
                    info.notify();
                }
            }
        }
    }
}

线程B

**
 * 线程B 负责打印B
 * Created by DONGSHILEI on 2017/10/17
 */
public class ThreadB implements Runnable{
    private Info info;

    public ThreadB(Info info) {
        this.info = info;
    }

    @Override
    public void run() {
        while (true){
            synchronized (info){
                if (info.flag){
                    try {
                        info.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    System.out.println(Thread.currentThread().getName()+"--"+info.msg);
                    info.msg = "A";
                    info.flag = true;
                    info.notify();
                }
            }
        }
    }
}

测试程序

**
 * 两个线程,交替打印A、B
 * Created by DONGSHILEI on 2017/10/17
 */
public class LockTest {

    public static void main(String[] args) {
        //公共对象,在线程获得该对象时加锁
        Info info = new Info();
        ThreadA a = new ThreadA(info);
        ThreadB b = new ThreadB(info);
        Thread t1 = new Thread(a);
        Thread t2 = new Thread(b);
        t1.start();
        t2.start();

    }
}

执行结果

结果
-0--A
Thread-1--B
Thread-0--A
Thread-1--B
Thread-0--A
Thread-1--B
Thread-0--A
Thread-1--B
Thread-0--A
Thread-1--B
Thread-0--A
Thread-1--B
Thread-0--A
Thread-1--B
Thread-0--A

相关文章

  • 实现两个线程交替执行

    今天看到一道面试题,要求实现两个线程交替打印A、B,作为练习,总结一下 代码 线程A 线程B 测试程序 执行结果

  • 两个线程严格交替执行java实现

    public class ThreadTurn { Object o = new Object(); Bo...

  • 两个线程之间接力性(handoff)的场景

    实现两个线程交替输出奇数偶数:synchronized ReentrantLock

  • Java多线程中join方法的理解

    thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用...

  • 线程间通信实例

    如何让两个线程依次执行? 主线程等待子线程运行 那如何让 两个线程按照指定方式有序交叉运行呢? 多线程交替打印AB...

  • N个线程交替输出的问题

    1、两个不同的线程交替打印Kao、La。2、两个线程,一个打印100内的奇数一个打印100内的偶数,交替执行。 N...

  • 多线程的_join()方法

    线程的合并指的是:将指定的线程加入到当前的线程之中,可以将两个交替执行的线程合并为顺序执行的线程,如果在线程B中调...

  • 并发和并行

    并发:指应用能够交替执行不同的任务,其实并发有点类似于多线程的原理,多线程并非是同时执行多个任务,如果你开两个线程...

  • 3.Java多线程----线程通信

    前言 假如现在有两个线程,如何实现两个线程交替打印1---100 结果 当一个线程输入后,使用wait()方法将此...

  • java如何让多个线程交替执行?

    曾经有面试官问过这样一个问题,如何让两个线程交替打印奇数和偶数?如何让多个线程交替执行? 回答这个问题之前需要先了...

网友评论

      本文标题:实现两个线程交替执行

      本文链接:https://www.haomeiwen.com/subject/eikopktx.html