1、join
package testSequential;
/**
* @author ZDH
* @version 1.0
* @date 2023/3/28 15:31
*/
class TestJoin implements Runnable {
String name;
public TestJoin(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " is Running");
}
}
public class methodAjoin {
public static void main(String[] args) throws InterruptedException {
Thread threadA = new Thread(new TestJoin("A"));
Thread threadB = new Thread(new TestJoin("B"));
Thread threadC = new Thread(new TestJoin("C"));
threadA.start();
threadA.join();//阻塞执行,执行完毕才进入下一步
threadB.start();
threadB.join();
threadC.start();
threadC.join();
}
}
执行结果:
2、CountDownLatch
package testSequential;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class worker implements Runnable {
private String name;
private CountDownLatch c1;
private CountDownLatch c2;
public worker(String name,CountDownLatch c1,CountDownLatch c2){
this.name = name;
this.c1 = c1;
this.c2 = c2;
}
@Override
public void run() {
try {
c1.await();
System.out.println(this.name +" is running!");
c2.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class methodBCountDownLatch {
public static void main(String[] args) {
CountDownLatch c1 = new CountDownLatch(0);
CountDownLatch c2 = new CountDownLatch(1);
CountDownLatch c3 = new CountDownLatch(1);
Thread t1 = new Thread(new worker("A",c1,c2));
Thread t2 = new Thread(new worker("B",c2,c3));
Thread t3 = new Thread(new worker("C",c3,c3));
t1.start();
t2.start();
t3.start();
}
}
执行结果:
3、SingleThreadPool
package testSequential;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author ZDH
* @version 1.0
* @date 2023/3/28 15:50
*/
class SingleThread implements Runnable {
private String name;
public SingleThread(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println(this.name + " is running");
}
}
public class methodCSingleThreadPool {
public static void main(String[] args) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Thread threadA = new Thread(new SingleThread("A"));
Thread threadB = new Thread(new SingleThread("B"));
Thread threadC = new Thread(new SingleThread("C"));
executorService.submit(threadA);
executorService.submit(threadB);
executorService.submit(threadC);
executorService.shutdown();
}
}
执行结果:
4、CompletableFuture
package testSequential;
import java.util.concurrent.CompletableFuture;
public class methodDCompletableFuture {
public static void main(String[] args) {
Thread threadA = new Thread(new SingleThread("A"));
Thread threadB = new Thread(new SingleThread("B"));
Thread threadC = new Thread(new SingleThread("C"));
CompletableFuture.runAsync(()->threadA.start()).thenRun(()->threadB.start()).thenRun(()->threadC.start());
}
}
执行结果: