`

两个线程一次打印数字

 
阅读更多
public class Test {
    private static boolean flag = true;
    private static final Object LOCK = new Object();
    private static int i=0;
    public static void print(String name){
        i++;
        System.out.println(name+"------"+i);
    }
    public static void main(String[] args) {
        // 两个线程 交替打印字符串
        Thread a = new Thread() {
            public void run() {
                while (i < 100)
                    synchronized (LOCK) {
                        {
                            if (false == flag) {
                                try {
                                    LOCK.wait();// 在wait后的瞬间线程b得到锁
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            flag = false;
                            print(getName());
                            LOCK.notify();// 在这里虽然唤醒了另一个线程b,但锁并没有释放
                        }
                    }
            };
        };
        Thread b = new Thread() {
            public void run() {
                while (1<100)
                    synchronized (LOCK) {
                        {
                            if (true == flag) {
                                try {
                                    LOCK.wait();// 在wait后的瞬间线程b得到锁
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            flag = true;
                            print(getName());
                            LOCK.notify();// 在这里虽然唤醒了另一个线程b,但锁并没有释放
                        }
                    }
            };
        };
        a.start();
        b.start();
    }
}

 

分享到:
评论

相关推荐

    启动两个线程,一个线程打印1~52,另一个线程打印A~Z

    启动两个线程,一个线程打印1~52,另一个线程打印A~Z

    多线程 打印1-99,100-199

    根据实验需求,我们需要创建两个子线程,分别打印从 1 到 99 和从 100 到 199 的数字,并且这两个线程需要交替打印数字。 **3.1 创建打印线程** 首先,我们创建两个类 `Test1` 和 `Test2` 来代表两个子线程,它们...

    java实验4.doc

    假设两个窗口同时出售一次列车的车票,车票就是共享资源,两个窗口就是两个线程。 3、编写程序,实现线程间的同步控制。假设有一个生产者(Producer),一个消费者(Consumer)。生产者产生0~9的整数,将它们存储在...

    java用线程两种方式

    在这个main方法中,程序通过两种方式创建了两个线程:一个打印1到1000之间的所有奇数,另一个打印所有偶数。通过使用while循环,程序会持续运行直到两个线程都完成了它们的任务。 总结来说,Java通过两种方式提供了...

    c#多线程顺序打印1-100数字-源码.rar

    例如,如果创建了两个线程,一个打印1-50,另一个打印51-100。 2. **初始化AutoResetEvent**:每个线程在启动前都会获得一个`AutoResetEvent`实例,初始状态为未设置(即等待状态)。 3. **线程执行**:每个线程...

    两个线程交替执行

    在上述代码中,我们可以看到两个线程 a 和 b,它们之间通过一个锁对象 LOCK 进行同步。线程 a 负责打印数字 1、2、3,而线程 b 负责打印数字 4、5、6。通过使用 synchronized 关键字,我们可以确保在某个时刻只有一...

    Java实现多线程轮流打印1-100的数字操作

    对于两个线程交替打印1-100的奇偶数,代码中使用了一个`volatile`关键字修饰的`flag`变量。`volatile`关键字确保了多个线程之间对共享变量的可见性,即一旦一个线程修改了`flag`的值,其他线程可以立即看到这个改变...

    java 两个线程相互顺序输出

    - 假设我们有两个线程`ThreadA`和`ThreadB`,它们需要交替打印数字。我们可以创建一个共享对象,例如`Counter`,其中包含一个计数器变量和`synchronized`方法。 - `ThreadA`在每次执行时会检查当前计数器是否为...

    使用继承Thread类的方式定义两个线程,.txt

    请使用继承Thread类的方式定义两个线程,一个线程可以计算1--100所有数字的累加和,另一个线程可以计算1--1000所有数字的累加和,每个线程计算完毕后各自打印计算结果,格式例如:”xxx线程计算1--100的累加和,结果...

    C++11用两个线程轮流打印整数的实现方法

    本文将详细解析如何使用C++11的标准线程语法来实现两个线程轮流打印整数,其中一个线程打印奇数,另一个线程打印偶数,同时涉及到线程同步的关键技术——互斥量和条件变量。 首先,为了确保线程安全,我们需要使用...

    线程练习题2

    实现两个线程,一个线程打印1-52,另一个线程打印A-Z,要求输出的结果如下: 1 2 A 3 4 B 5 6 C 7 8 D 9 10 11 12 ... 52 E F G H I J K ... X Y Z 即:当数字小于9时,数字和字母交替打印; 当数字大于等于9时,先把...

    实现Runnable接口创建多线程.docx

    在`main()`方法中,我们实例化了一个`Demo`对象`d`,然后使用`Thread`类的构造方法`Thread(Runnable target)`创建了两个线程对象`t1`和`t2`,并将`d`作为参数传入。这样,`t1`和`t2`都将执行`Demo`类中的`run()`方法...

    java实现两个线程交替打印的实例代码

    在上面的代码中,我们创建了两个线程 t1 和 t2,t1 负责打印字符,而 t2 负责打印数字。我们使用 ReentrantLock 和 Condition 来实现线程同步,确保两个线程交替打印。 使用 LinkedTransferQueue 实现线程交替打印 ...

    华为Java高级面试题:用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D…26Z

    HSDIS查看Java代码的汇编指令 java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssemble 使用 LockSupport.park()and unpark() public static void main(String[] args) { char[] aI = 1234567.toCharArray();...

    空中网线程题整理

    在该题中,要求实现一个程序,能够利用多个线程打印出16个数字。具体要求为:创建16个线程,每个线程调用`parseLog()`方法打印一个数字。最终的效果是这16个数字按照顺序被打印出来,并且每个数字后面跟随着当前的...

    多线程

    1. **线程打印字母和数字**: - 创建三个线程,分别负责打印'a'字母100次、打印'b'字母100次以及打印1到100的整数。这里可以使用`System.out.println()`来实现打印,但要注意多线程环境下,打印顺序可能出现交错,...

    Java多线程-线程间的通信

    3. **等待和唤醒**:为了让两个线程能够交替打印数字,需要利用`wait()`和`notify()`方法。 **示例代码**: ```java public class PrintNumber implements Runnable { private final Object lock = new Object();...

    多线程和并行程序设计

    在上述代码示例中,我们定义了两个实现Runnable接口的类PrintChar和PrintNum,分别用于打印字符和数字。我们创建了三个线程,每个线程运行不同的任务。这些线程在执行过程中,会在控制台上轮流打印字母和数字。这种...

    java语言学习-04 线程.pdf

    预期输出结果为两个线程交替打印数字和带有描述的数字,但由于线程调度的不确定性,实际输出结果可能不会严格按照预期的顺序出现。 ### 总结 本章介绍了Java中的线程概念以及线程的基本创建方法。理解进程与线程...

    线程练习题

    利用线程的通信机制,用两个线程打印以下的结果: 1 2 A 3 4 B 5 6 C 7 8 D ... 49 50 Y 51 52 Z 即:数字和字母交替打印;

Global site tag (gtag.js) - Google Analytics