Java多线程
题目描述:
有三个线程,要求分别在控制台输入后进行字符串的拼接"_A","_B","_C"。
条件是:
1.线程能顺序执行,线程1执行出“_A”,线程2执行“_B”,线程3执行“_C”;
2.三个线程同时启动。
代码如下:
import java.util.Scanner;
import java.util.concurrent.CountDownLatch;
public class Main {
private int i = 0;
private static StringBuffer sb = new StringBuffer();
private static CountDownLatch cd = new CountDownLatch(3);
public static void main(String[] args) throws InterruptedException {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
sb.append(str);
Thread pre = new Thread(new Runnable() {
@Override
public void run() {
sb.append(Thread.currentThread().getName());
cd.countDown();
}
},"_A");
pre.start();
for(int i = 1;i < 3;i++) {
Thread thread;
if(i == 1) {
thread = new Thread(new Thr(pre),"_B");
}else {
thread = new Thread(new Thr(pre),"_C");
}
thread.start();
pre = thread;
}
cd.await();
System.out.println(sb.toString());
}
static class Thr implements Runnable{
private Thread thread;
public Thr(Thread thread) {
this.thread = thread;
}
@Override
public void run() {
try {
thread.join();
}catch(InterruptedException e) {
}
sb.append(Thread.currentThread().getName());
cd.countDown();
}
}
}
若是只是顺序打印ABC的话:
package com.ymm.thread;
public class JionMain {
public static void main(String[] args){
ThreadA threadA = new ThreadA();
ThreadB threadB = new ThreadB(threadA);
ThreadC threadC = new ThreadC(threadB);
threadA.start();
threadB.start();
threadC.start();
}
}
class ThreadA extends Thread{
@Override
public void run(){
System.out.println("A");
}
}
class ThreadB extends Thread {
private ThreadA threadA;
public ThreadB(ThreadA threadA) {
this.threadA = threadA;
}
@Override
public void run() {
try {
threadA.join();
} catch (InterruptedException e) {
}
System.out.println("B");
}
}
class ThreadC extends Thread {
private ThreadB threadB;
public ThreadC(ThreadB threadB) {
this.threadB = threadB;
}
@Override
public void run() {
try {
threadB.join();
} catch (InterruptedException e) {
}
System.out.println("C");
}
}

浙公网安备 33010602011771号