首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试题精选:两个线程按顺序交替输出1-100

    具体题目是这样的,两个线程交替按顺序输出1-100,第一个线程只能输出偶数,第二线程输出奇数,想象下两个小孩轮流喊数。 ?...两个线程交替输出,这就意味着它俩是需要协同的,协同意味着二者之间要有信息传递,如何相互传递信息?...如果是三个线程交替输出呢?...和wait方法只能唤醒全部线程,然后另外两个线程输出前都需要额外判断下是否轮到自己输出了。...生产者消费者 解析:两个线程按顺序交替输出本质上就是多线程之间的相互协同,而这个领域另外一个非常有名且更常见的问题就是生产者消费者问题,两个线程按顺序交替输出你可以认为是当生产者和单消费者的一种特殊情况

    63420

    Java 线程同步方式 waitnotify(两个线程交替执行的例子)

    线程同步,就是线程之间互相协调,通过等待,唤醒等操作,避免线程之间同时操作同一个资源。简单的说就是线程之间互相协作,避免干扰了其他线程的工作。...Java 线程中,有多种方式可以实现线程同步,wait/notify 方法是最常用的一种方式。...实现 2 个线程,一个线程只能打印奇数,另一个线程只能打印偶数,现在需要打印出 1234…..100 这样的数列。 下面代码的一种实现方式,未有任何同步机制,所以两个线程不可能交替运行。...args[]) throws Exception { Object lock = new Object(); final boolean[] flag = {true};//交替执行标志位...true-线程1运行,false-线程2运行 FutureTask task1 = new FutureTask(() -> { for (int i = 0;

    4.5K30

    经典面试题-两个线程交替打印奇数和偶数

    前提 今天下班时候和同事聊天偶然听到面试题“两个线程交替打印奇数和偶数”的实现,这里做一个复盘。 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视器实现。...场景二:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用JDK提供的并发类库实现。...这两个场景中,场景一是一种比较古老的同步方式,本质由JVM实现;场景二是JDK1.5引入JUC包之后简化了并发编程的前提下的更简便的实现。下面针对两个场景做对应的实现。...场景一 场景一中,线程A和线程B交替打印奇数和偶数,使用对象监视器实现,通俗来说:线程A或线程B只要有一者竞争锁成功,就打印++i,通知其他线程从等待集合中释放,然后自身线程加入等待集合并且释放锁即可。...thread1.start(); thread2.start(); Thread.sleep(Integer.MAX_VALUE); } } 执行后的输出结果

    3.8K31

    经典面试题-两个线程交替打印奇数和偶数

    前提 今天下班时候和同事聊天偶然听到面试题“两个线程交替打印奇数和偶数”的实现,这里做一个复盘。 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视器实现。...场景二:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用JDK提供的并发类库实现。...这两个场景中,场景一是一种比较古老的同步方式,本质由JVM实现;场景二是JDK1.5引入JUC包之后简化了并发编程的前提下的更简便的实现。下面针对两个场景做对应的实现。...场景一 场景一中,线程A和线程B交替打印奇数和偶数,使用对象监视器实现,通俗来说:线程A或线程B只要有一者竞争锁成功,就打印++i,通知其他线程从等待集合中释放,然后自身线程加入等待集合并且释放锁即可。...thread1.start(); thread2.start(); Thread.sleep(Integer.MAX_VALUE); } } 执行后的输出结果

    69520

    9.线程按序交替

    9.线程按序交替 线程按序交替 - 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。...那么通过一个锁 Lock 可以创建多个 condition ,例如: 线程1 使用 condition1 来控制阻塞、唤醒 线程2 使用 condition2 来控制阻塞、唤醒 线程3 使用 condition3...如下: 如果当前是线程1,则 调用 condition1.await() 阻塞 线程1,然后调用 condition2.signal() 唤醒 线程2 如果当前是线程2,则 调用 condition2....await() 阻塞 线程2,然后调用 condition3.signal() 唤醒 线程3 如果当前是线程3,则 调用 condition3.await() 阻塞 线程3,然后调用 condition1...,这三个线程的 ID 分别为 A、B、C, * 每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。

    20720

    线程交替输出A1B2C3D4...你怎么实现?

    引言 不知道最近有没有小伙伴去面试,今天了不起回想到了早期去面试遇到的一个多线程面试问题。 面试问题是一个笔试题: 两个线程依次交替输出A~Z,1到26,形如A1B2C3D4......notify()方法用于唤醒一个正在等待的线程,使其从wait()方法中返回。 结合一个出让等待的机制,就这样交替实现。...具体来说,CountDownLatch有两个主要方法: await()方法:调用该方法的线程会进入等待状态,直到计数器的值为0或者被中断; countDown()方法:调用该方法会将计数器减1,当计数器的值为...那么我们就利用这一点它必须要另外一个线程来取进而实现把值交替输出。...使用枚举类作同步标志 创建一个枚举类ReadyToRun,利用while(true)死等和枚举类指向对象不同作标志位交替输出

    21640

    奇偶数线程交替执行问题

    一个面试题:两个线程,一个打印偶数,一个打印奇数,并且轮流打印,我们可以看到这种场景模式肯定是需要通过同步来实现, 实现通过的方式我们可以采用ReentrantLock来实现,也可以通过采用synchronized...来实现,下边就这两种方式进行 实现,平时感觉自己代码还是敲的少,以后还是要加强代码量; 方式一:通过synchronized来实现,使用该种方式实现,有两个要点记录,一个是:我们在没有使用锁对象的wait...()是没有问题的; 两一个是:在对象锁的wait方法被唤醒后,在wait的地方继续执行,同时执行完代码块后优先拿到该对象锁,进入其wait状态; 这样技术num使用 AtomicInteger; 偶数线程...100) { synchronized(obj) { System.out.println("单线程..."); Thread event = new Thread(et); event.setName("双数线程"); odd.setPriority(10)

    66820

    线程间定制化通信--交替打印

    线程间定制化通信 1、案例介绍 2、实现流程 3、代码实现 1、案例介绍   启动三个线程AA、BB、CC,线程AA打印5次,线程BB打印30次,线程CC打印15次,按照顺序循环10轮 2、实现流程...设置三个标志位, flag=1的时候,AA线程打印5次,同时修改标志位flag=2,通知BB线程 flag=2的时候,BB线程打印10次,同时修改标志位flag=3,通知CC线程 flag=...3的时候,CC线程打印15次,同时修改标志位flag=1,通知AA线程 3、代码实现 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock...loop); } //通知 flag=2; //修改标志位 c2.signal(); //通知BB线程...loop); } //通知 flag=3; //修改标志位 c3.signal(); //通知CC线程

    48930

    记一个有意思的面试题 → 线程交替输出问题

    问题描述   用两个线程,一个输出数字,一个输出字母,交替输出 1A2B3C4D...26Z ?   该如何实现?...这种方式,相信大家都能写出来,但是这里留三个问题(面试点)   1、线程代码中, try 中的 notify() 能否与 wait() 交换位置,为什么   2、线程代码中, for 下的 notify...这种方式,写出来应该也不难,同样留三个问题(面试点)   1、线程代码中, for 中的 signal() 能否与 await() 交换位置,为什么   2、线程代码中, for 下的 signal()...在线程 t2 中的 LockSupport.park() 之前执行会怎么样,为什么   3、上面的代码能否保证一定先输出数字,为什么   4、 LockSupport 的 park 、 unpark 与...这种方式也许不太好理解,留四个问题(面试点)加深理解   1、线程代码中, while 条件为什么是 !

    56310

    线程交替打印数字—多种实现

    # 多线程交替打印数字—多种实现 # 使用synchronized锁实现 public class Test { public static void main(String[] args)...奇数:99 偶数:100 通过加锁和notify()、wait()机制可以有效的实现两个线程分别打印奇数和偶数,但互斥锁始终会影响性能,效率不高。...LockSupport.unpark(thread2); } } } 那么程序将会发生死锁,因为两个线程都持有当前线程的许可,并没有等待到释放许可的执行...奇数线程: 偶数线程: 此时我们采用jps命令找到当前线程的pid 之后采用jstack pid命令分析当前线程的堆栈信息,可以发现奇数线程和偶数线程都处于WAITING状态,他们都在等待对方释放锁或传递许可...所以正确的写法应该在if判断内,当打印之后便会阻塞当前线程,由于数字已经打印,再次循环时便会进入到else的判断逻辑,即当前线程发现不是属于自己该打印的数字就会尝试唤醒另一个线程

    59310

    面试题-使用线程交替打印奇数偶数

    需要使用两个线程交替打印奇偶数。...使用同步锁解决这个问题 使用信号量来实现交替打印 定义两个信号量,一个奇数信号量,一个偶数信号量,都初始化为1 先用掉偶数的信号量,因为要让奇数先启动,等奇数打印完再释放 信号量实现 具体实现思路:...定义两个信号量,一个奇数信号量,一个偶数信号量,都初始化为1 先用掉偶数的信号量,因为要让奇数先启动,等奇数打印完再释放 具体流程就是 第一次的时候先减掉偶数的信号量 奇数线程打印完成以后用掉奇数的信号量...虽然这个异常不在这个问题的考虑范围内 但是可以使用finally 来包裹释放锁资源 同步锁打印 让两个线程使用同一把锁。交替执行 。 判断是不是奇数 如果是奇数进入奇数线程执行打印并加一。...Author yunlogn * @Date 2019/5/21 * @Description 交替打印奇偶数 */ public class AlternatePrinting { public

    1.3K21
    领券