• 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");
            }
        }
    
  • 相关阅读:
    SAP ABAP Netweaver服务器的标准登录方式讲解
    php导出百万数据到csv
    消息中间件Kafaka
    kafka安装
    Linux系统下安装jdk及环境配置(两种方法)
    PHP导出3w条数据成表格
    excel 导出导入
    利用Redis锁解决高并发问题
    BeyondCompare4破解方法
    Linux(Ubuntu)通过nfs挂载远程硬盘
  • 原文地址:https://www.cnblogs.com/youdiaodaxue16/p/11436178.html
Copyright © 2020-2023  润新知