Java多线程之——简单多线程:Thread和Runnable

2021-06-28  本文已影响0人  帕博雷克斯丢丢

题目:请用多线程写出下面的需求:有一个int类型的变量,用四个线程,其中两个对它做加一的操作,两个对它做减一的操作,最后输出变量结果。

答案:

package com.demos.vertx.minirunner;

public class RunThePracticeTwo {

    private int count = 0;

    public static void main(String[] args) {
        RunThePracticeTwo run = new RunThePracticeTwo();

        Thread t1 = new Thread(() -> {
            synchronized (run) {
                System.out.println(Thread.currentThread().getName() + "--->: " + ++run.count);
            }
        });

        Thread t2 = new Thread(() -> {
            synchronized (run) {
                System.out.println(Thread.currentThread().getName() + "--->: " + ++run.count);
            }
        });

        Thread t3 = new Thread(() -> {
            synchronized (run) {
                System.out.println(Thread.currentThread().getName() + "--->: " + --run.count);
            }
        });

        Thread t4 = new Thread(() -> {
            synchronized (run) {
                System.out.println(Thread.currentThread().getName() + "--->: " + --run.count);
            }
        });

        t1.setName("Thread1");
        t2.setName("Thread2");
        t3.setName("Thread3");
        t4.setName("Thread4");

        t1.start();
        t2.start();
        t3.start();
        t4.start();

        boolean loop = true;

        while (loop) {
            if (!(t1.isAlive() || t2.isAlive() || t3.isAlive() || t4.isAlive())) {
                System.out.println(Thread.currentThread().getName() + "--->: " + run.count);
                loop = false;
            }
        }
    }
}

输出结果:

/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=53796:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/lib/tools.jar:/Users/monica/Development/tempspace/laboratory/java/learning/vertx-demo/target/classes:/Users/monica/Development/devenv/building/maven/repository/io/vertx/vertx-core/4.0.3/vertx-core-4.0.3.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-common/4.1.60.Final/netty-common-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-buffer/4.1.60.Final/netty-buffer-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-transport/4.1.60.Final/netty-transport-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-handler/4.1.60.Final/netty-handler-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-codec/4.1.60.Final/netty-codec-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-handler-proxy/4.1.60.Final/netty-handler-proxy-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-codec-socks/4.1.60.Final/netty-codec-socks-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-codec-http/4.1.60.Final/netty-codec-http-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-codec-http2/4.1.60.Final/netty-codec-http2-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-resolver/4.1.60.Final/netty-resolver-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-resolver-dns/4.1.60.Final/netty-resolver-dns-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/io/netty/netty-codec-dns/4.1.60.Final/netty-codec-dns-4.1.60.Final.jar:/Users/monica/Development/devenv/building/maven/repository/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar:/Users/monica/Development/devenv/building/maven/repository/io/vertx/vertx-codegen/4.1.0/vertx-codegen-4.1.0.jar com.demos.vertx.minirunner.RunThePracticeTwo
Thread1--->: 0
Thread4--->: 1
Thread3--->: 0
Thread2--->: -1
main--->: 0

Process finished with exit code 0
上一篇下一篇

猜你喜欢

热点阅读