使用lambda的形式实例化线程任务类,创建线程对象,并将线程任务类作为构造方法参数传入。
package com.kingh.thread.create; /** * 创建线程with lambda * * @author <a href="https://blog.csdn.net/king_kgh>kingh</a> * @version 1.0 * @date 2019/3/18 10:04 */public class createthreaddemo5_lambda { public static void main(string[] args) throws exception { // 使用lambda的形式实例化线程任务类 runnable task = () -> { while (true) { // 输出线程的名字 printthreadinfo(); } }; // 创建线程对象,并将线程任务类作为构造方法参数传入 new thread(task).start(); // 主线程的任务,为了演示多个线程一起执行 while (true) { printthreadinfo(); thread.sleep(1000); } } /** * 输出当前线程的信息 */ private static void printthreadinfo() { system.out.println(当前运行的线程名为: + thread.currentthread().getname()); try { thread.sleep(1000); } catch (exception e) { throw new runtimeexception(e); } }}
2、使用executorservice、callable、future实现有返回结果的多线程
可以返回值的任务必须是callable接口,类似的,没有返回值的任务必须是runnable接口。执行callable任务后,可以获得一个future对象,通过调用get可以获得callable任务返回的object,然后结合线程池接口executorservice可以实现传说中有返回结果的多线程。
import java.util.concurrent.*;import java.util.date;import java.util.list;import java.util.arraylist; /*** 有返回值的线程*/@suppresswarnings(unchecked)public class test {public static void main(string[] args) throws executionexception, interruptedexception { system.out.println(----程序开始运行----); date date1 = new date(); int tasksize = 5; // 创建一个线程池 executorservice pool = executors.newfixedthreadpool(tasksize); // 创建多个有返回值的任务 list<future> list = new arraylist<future>(); for (int i = 0; i < tasksize; i++) { callable c = new mycallable(i + " "); // 执行任务并获取future对象 future f = pool.submit(c); // system.out.println(">>> + f.get().tostring()); list.add(f); } // 关闭线程池 pool.shutdown(); // 获取所有并发任务的运行结果 for (future f : list) { // 从future对象上获取任务的返回值,并输出到控制台 system.out.println(>>> + f.get().tostring()); } date date2 = new date(); system.out.println(----程序结束运行----,程序运行时间【 + (date2.gettime() - date1.gettime()) + 毫秒】);}} class mycallable implements callable<object> {private string tasknum; mycallable(string tasknum) { this.tasknum = tasknum;} public object call() throws exception { system.out.println(>>> + tasknum + 任务启动); date datetmp1 = new date(); thread.sleep(1000); date datetmp2 = new date(); long time = datetmp2.gettime() - datetmp1.gettime(); system.out.println(>>> + tasknum + 任务终止); return tasknum + 任务返回运行结果,当前任务时间【 + time + 毫秒】;}}
以上就是java的多线程如何实现的详细内容。