美文网首页
java 多个线程交替执行

java 多个线程交替执行

作者: 代瑶 | 来源:发表于2022-03-18 14:47 被阅读0次
import java.util.concurrent.atomic.AtomicInteger; 

public class ThreadWork {

    private static final Object locks = new Object();
    private static AtomicInteger threadCount = new AtomicInteger(4);

    public void startTest() {
        new Thread(new TestRunnable()).start();
        new Thread(new TestRunnable()).start();
        new Thread(new TestRunnable()).start();
        new Thread(new TestRunnable()).start();

    }

    static class TestRunnable implements Runnable {
        @Override
        public void run() {
            int i = 100;
            while (i > 0) {
                synchronized (locks) {
                    i -= 20;
                    try {
                        System.out.println("输出值:" + i + "   打印线程名:" + Thread.currentThread().getName());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    threadCount.decrementAndGet();

                    if (threadCount.get() == 0) {
                        threadCount.set(4);
                        locks.notifyAll();
                    } else {
                        try {
                            locks.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
}

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.1\lib\idea_rt.jar=57732:D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator\IdeaProjects\Decompilation\out\production\Decompilation" MainIn
输出值:80   打印线程名:Thread-0
输出值:80   打印线程名:Thread-2
输出值:80   打印线程名:Thread-3
输出值:80   打印线程名:Thread-1
输出值:60   打印线程名:Thread-1
输出值:60   打印线程名:Thread-3
输出值:60   打印线程名:Thread-2
输出值:60   打印线程名:Thread-0
输出值:40   打印线程名:Thread-0
输出值:40   打印线程名:Thread-2
输出值:40   打印线程名:Thread-3
输出值:40   打印线程名:Thread-1
输出值:20   打印线程名:Thread-1
输出值:20   打印线程名:Thread-3
输出值:20   打印线程名:Thread-2
输出值:20   打印线程名:Thread-0
输出值:0   打印线程名:Thread-0
输出值:0   打印线程名:Thread-2
输出值:0   打印线程名:Thread-3
输出值:0   打印线程名:Thread-1

相关文章

  • java 多个线程交替执行

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

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

  • java锁知识点小记

    java锁的知识点小记:一.什么是线程安全:标准定义:多个线程访问一个对象,如果不用考虑这些线程的调度和交替执行,...

  • 01-多线程

    Java多线程 线程和进程的区别 本质:由CPU进行调度的执行任务,多个任务被快速轮换执行,使得宏观上具有多个线程...

  • Java中的对象级别锁和类级别锁

    在Java中,synchronized代码块一次只能由一个线程执行。此外,java支持并发执行多个线程。这可能导致...

  • iOS多线程:『GCD』详尽总结(三):异步执行 + 并发队列

    4.2 异步执行 + 并发队列 可以开启多个线程,任务交替(同时)执行。 示例代码: 输出结果:2018-02-2...

  • Android Thread以及锁同步(synchronized

    Thread定义 Thread是程序中的执行线程。Java虚拟机允许应用程序同时运行多个执行线程。每个线程都有优先...

  • redis实现分布式锁

    一、什么是线程安全 当多个线程访问某个类时,不管运行时环境采用何种类,调度方式或者这些线程将如何交替执行,...

  • 并发和并行

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

  • JAVA 核心笔记 || [3] 修饰符

    JAVA 多线程 JAVA多线程: 最大限度的利用CPU 并行执行程序的多个部分 创建线程的两种方法 扩展 Thr...

网友评论

      本文标题:java 多个线程交替执行

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