您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

java的多线程如何实现

2025/4/12 5:08:59发布11次查看
1、lambda表达式创建线程
使用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的多线程如何实现的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product