两个线程交替打印奇数和偶数

public class ThreadTest {
    public static void main(String[] args) {
        Thread evenThread = new Thread(new PrintEven(),"打印奇数");
        Thread oddThread = new Thread(new PrintOdd(),"打印偶数");
        evenThread.start();
        oddThread.start();
    }
}

class Count{
    public static final Object lock = new Object();
}

class PrintEven implements Runnable{
    @Override
    public void run() {
        synchronized (Count.lock) {
            for(int i = 1; i < 10; i += 2) {
                System.out.println(Thread.currentThread().getName() + " : " + i);
                Count.lock.notifyAll();
                try {
                    Count.lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            Count.lock.notifyAll();
        }
    }
}

class PrintOdd implements Runnable{
    @Override
    public void run() {
        synchronized (Count.lock) {
            for(int i = 2; i < 10; i += 2) {
                System.out.println(Thread.currentThread().getName() + " : " + i);
                Count.lock.notifyAll();
                try {
                    Count.lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            Count.lock.notifyAll();
        }
    }
}

原文地址:https://www.cnblogs.com/trnanks/p/11517954.html

时间: 2024-08-30 05:13:24

两个线程交替打印奇数和偶数的相关文章

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

前提 今天下班时候和同事聊天偶然听到面试题“两个线程交替打印奇数和偶数”的实现,这里做一个复盘. 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视器实现. 场景二:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用JDK提供的并发类库实现. 这两个场景中,场景一是一种比较古老的同步方式,本质由JVM实现:场景二是JDK1.5引入JUC包之后简化了并发编程的前提下的更简便的实现.下面针对两个场景做对应的实现. 场景一 场景一中,线程A和线程B交替打印奇数

两个线程交替打印信息

看见一个关于两个线程交替打印信息的题目,题目大概是 子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码. 写了两个版本,一个是用了mutex,不用条件变量:另外一个是用条件变量. 第一个,不用条件变量 1 #include <stdio.h> 2 #include <string.h> 3 #include <pthread.h> 4 5 6 7 const int LOOP_

经典笔试题:两个线程交替打印奇偶数

一.采用对象的wait() notify()方法实现 package com.gaopeng.programming; import java.util.concurrent.TimeUnit; /** * 经典笔试题:交替打印奇偶数 采用对象的wait() notify()方法实现 * * @author gaopeng * */ public class OddEvenThread { private static volatile Integer counter = 0; public s

两个线程交替打印1-99

参考https://github.com/crossoverJie/JCSprout/blob/master/src/main/java/com/crossoverjie/actual/TwoThread.java从线程方面实现交替打印. public class Test { volatile boolean isEven = false; @org.junit.Test public void testfda() throws InterruptedException { Thread a

控制两个线程交替打印

package datatype; public class demo { static final Object object = new Object(); public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { for (int i = 1; i < 51; i++) { System.out.print(i); if (i

头条面试题之实现两个线程轮流打印字符串

在面试头条的时候,有一个很有意思的题目,利用两个线程交替打印一个字符串,这里主要就是对多线程中wait/notify的应用,特此记录. 对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有: void notify() Wakes up a single thread that is waiting on this object’s monitor. 译:唤醒在此对象监视器上等待的单个线程 void notifyAll() Wakes up all t

Java多线程通信之两个线程分别打印AB各10次

一道经典的面试题目:两个线程,分别打印AB,其中线程A打印A,线程B打印B,各打印10次,使之出现ABABABABA.. 的效果 1 package com.shangshe.path; 2 3 public class ThreadAB { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 10 final Print business = new Print(); 11 12 new Threa

两个线程分别打印 1- 100,A 打印偶数, B打印奇数。

1. 直接用CAS中的AtomicInteger package concurency.chapter13; import java.util.concurrent.atomic.AtomicInteger; /** * @auther draymonder */ public class PrintOddAndEven { public static volatile boolean flag = false; public static AtomicInteger num = new Ato

Java 两线程交替打印奇偶数(一)

使用synchronized 及 Object对象的wait()和notifyAll()方法, Code如下 package com.shiwei.thread; public class OddEvenRunable { private static Object lock = new Object(); public static void main(String[] args) { PrintNumber pOdd = new PrintNumber(true, lock); PrintN