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);
        PrintNumber pEven = new PrintNumber(false, lock);
        Thread t1 = new Thread(pOdd);
        Thread t2 = new Thread(pEven);
        t1.start();
        t2.start();
    }
}

class PrintNumber implements Runnable{
    Boolean flag;
    Object lock;
    public PrintNumber(Boolean flag, Object lock){
        this.flag = flag;
        this.lock = lock;
    }

    public void run() {
        for(int i=1; i< 20; i=i+2){

            synchronized(lock){

                if(flag){
                    System.out.println("a---"+i);
                }else{
                    System.out.println("b---"+(i+1));
                }

                lock.notifyAll();

                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        }
    }

}

I. synchronized 锁住的是对象

//@TODO

II. Object wait(), notify() 和notifyAll()

//@TODO

时间: 2024-10-11 06:38:06

Java 两线程交替打印奇偶数(一)的相关文章

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

一.采用对象的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

两个线程交替打印信息

看见一个关于两个线程交替打印信息的题目,题目大概是 子线程循环 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_

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

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

两个线程交替打印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

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

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{ pu

控制两个线程交替打印

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

java 多线程–线程交替

要求: 借助同步机制,sleep()方法,join()方法,实现动画显示:甲线程:1.3.5.7.9乙线程:2.4.6.8.10丙线程:a.b.c.d.emain()线程输出:线程开始,线程结束 输出结果:线程开始,1-a-2## 3-b-4## 5-c-6## … 思考: 使用多个判断标记,模拟(消费者-生产者)每线程输出一个后就等待,然后改变自己的标记临界资源–使用多个== putX() == 方法,判断属于自己的标记(== isEmptyX ==)然后输出使多个线程有序的交替执行代码: c

Java解惑之判断个奇偶数就这么难?

如果,需要一个函数来判断传入值的奇偶性,你会怎么做? 这样? public boolean isOdd(int i) { return i % 2 == 1; } 还是这样? public boolean isOdd(int i) { return i % 2 != 0; } 很遗憾,第一种方式会错掉四分之一,这与Java对于取模符号的定义有关: (a / b) * b + a %b = a; 为保证上述等式的成立,在a为负数的时候,对于2的取模将会成为一个负数,例如: (-3 / 2) + (

Python实现线程交替打印字符串

import threading con = threading.Condition() word = u"12345上山打老虎" def work(): global word con.acquire() while True: print word[0] word = word[1:] if len(word) == 0: break con.notify() if len(word) == 1: break con.wait() con.release() t1 = thread