首页 > 其他分享 >如何实现主线程打印子线程的结果(阿里一面)

如何实现主线程打印子线程的结果(阿里一面)

时间:2023-03-19 11:12:51浏览次数:38  
标签:Thread 打印 System 阿里 线程 println public out

1.自定义runnable接口实现类

public class MySyncThreadTest {
    public static void main(String[] args) throws Exception {
        CustomRunnable cRunnacle = new CustomRunnable();
        Thread thread = new Thread(cRunnacle,"子线程");
        thread.start(); //子线程执行
        System.out.println("主线程做自己的事情");
        thread.join(); //等待子线程执行完毕,这里会阻塞 
        System.out.println("获取子线程返回结果:"+cRunnacle.getData());
    }
    static final class CustomRunnable implements Runnable{
        private String a = "";
        public void run() {
            try {
                System.out.println(Thread.currentThread().getName()+":执行 start");
                Thread.sleep(2000); //子线程停留2秒
                System.out.println(Thread.currentThread().getName()+":执行 end");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            a = "Hello world";
        }
        private String getData() {
            return a;
        }
    }
}

runnable接口的run方法是没有返回值的,因此可以自定义一个方法返回run方法运行的结果

2.Future实现类+Callable

package com.jgyang.com;
 
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
 
public class MySyncThreadTest2 {
 
    public static void main(String[] args) throws Exception {
        CustomCallable cRunnacle = new CustomCallable();
        FutureTask<String> futureTask = new FutureTask<String>(cRunnacle);
        Thread thread = new Thread(futureTask,"子线程");
        thread.start(); //子线程执行
        
        System.out.println("主线程做自己的事情--start");
        System.out.println("获取子线程返回结果:"+futureTask.get());//获取返回结果是会阻塞
        System.out.println("主线程做自己的事情--end");
        
    }
    
    static final class CustomCallable implements Callable<String>{
        public String call() throws Exception {
            System.out.println(Thread.currentThread().getName()+":执行 start");
            Thread.sleep(2000); //子线程停留2秒
            System.out.println(Thread.currentThread().getName()+":执行 end");
            return "Hello world";
        }
        
    }
}

标签:Thread,打印,System,阿里,线程,println,public,out
From: https://www.cnblogs.com/wangstudyblog/p/17232611.html

相关文章

  • 我们说StringBuilder是线程不安全的,是什么原因呢?
    在Java中字符串属于对象,Java提供了String类来创建和操作字符串。String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪......
  • 多线程篇-交替打印
    背景有如下需求:线程1打印5次a,线程2打印5次b,线程3打印5次c,要求最后的结果是abcabcabcabc步骤简单情况先考虑简单的情况,然后进行拓展。简单版需求:线程1打印1,线程2......
  • 打印100~999之间三位数每一位的积等于每一位的和的数字以及这些数的总数
    打印100~999之间三位数每一位(个十百)的积等于每一位(个十百)的和的数字以及这些数的总数首先需要一个循环,遍历所有的三位数,即100~999for(inti=100;i<1000;i++)......
  • Day 17 17.3 多线程实现之线程池
    多线程实现之线程池1引入系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量......
  • 两个线程交替打印26个字母
    代码#include<iostream>#include<thread>#include<mutex>#include<condition_variable>usingnamespacestd;mutexmtx;condition_variablecv;boolflag=t......
  • 力扣---剑指 Offer 06. 从尾到头打印链表
    输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例1:输入:head=[1,3,2]输出:[2,3,1]限制:0<=链表长度<=10000来源:力扣(LeetCode)链接:https://leetcode......
  • 多线程编程五:信号量
    2.33.信号量的概念_哔哩哔哩_bilibili2.34.信号量的工作机制_哔哩哔哩_bilibili......
  • pat 乙级 1027 打印沙漏
    ac但写得就像坨答辩过两天我自己都忘了这些变量用来干嘛的了1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<math.h>56int......
  • 谈谈你对Java中常用的几种线程池的理解
    为什么使用线程池为每个请求创建一个新线程的开销很大容易引起资源不足,造成浪费使用线程池的风险死锁、资源不足和线程泄漏。死锁当一组进程或线程中的每一个都在......
  • 线程池的参数如何设置?(蚂蚁一面)
    核心线程数:如果任务是CPU密集型,即计算任务比较多,可以设置线程数为核心数+1,这样可以让CPU资源得到充分利用。如果任务是IO密集型,即网络请求比较多,可以根据实际情况设......