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