侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

关于java中创建线程的方式的总结

Java  /  管理员 发布于 8年前   195

1、继承Thread类

public class ThreadCreator extends Thread{    public static void main(String[] args) {       //第一种方式:       ThreadCreator creator = new ThreadCreator();       Thread thread = new Thread(creator,"线程1");       thread.start();       //第二种方式:       Thread thread = new ThreadCreator();       thread.start();       //第三种方式:       new ThreadCreator().start();   }     @Override    public void run() {        System.out.println(Thread.currentThread().getName() + "run");    }}

2、实现Runnable接口

(免费学习视频教程分享:java视频教程)

public class ThreadCreator implements Runnable{    public static void main(String[] args) {       ThreadCreator creator = new ThreadCreator();       Thread thread = new Thread(creator,"线程1");       thread.start();    }    @Override    public void run() {        System.out.println(Thread.currentThread().getName() + "run");    }}

3、实现Callable接口

public class ThreadCreator implements Callable<Integer> {    public static void main(String[] args) throws ExecutionException, InterruptedException {       ThreadCreator creator = new ThreadCreator();       FutureTask futureTask = new FutureTask(creator);       Thread thread = new Thread(futureTask,"线程");       thread.start();       System.out.println(futureTask.get());    }    @Override    public Integer call() {        return 1024;    }}

4、线程池ExecutorService

public class ThreadCreator{   static ExecutorService service = Executors.newFixedThreadPool(5);    public static void main(String[] args) throws ExecutionException, InterruptedException {        //execute无返回值        service.execute(new ThreadTask(1,"1"));        //submit有返回值        Future<Integer> result = service.submit(new ThreadTaskCall());        System.out.println(result.get());        service.shutdownNow();    }    static class ThreadTask implements Runnable{        private int param1;        private String param2;        public ThreadTask(int param3,String param4){this.param1 = param3;this.param2 = param4;        }        @Override        public void run() {System.out.println(param1+param2);        }    }    static class ThreadTaskCall implements Callable<Integer>{        @Override        public Integer call() throws Exception {return 1024;        }    }}

线程池中submit和execute的区别:

(1)可接受的任务类型不一样:execute只能接受Runnable任务,submit还可以接受Callable任务。

(2)返回值:execute无返回值,任务一旦提交,无法在当前线程中监控执行结果。submit有一个Future类型的返回值,用来接收返回值或响应异常。通过get()方法获取。

submit底层还是调用的execute,只是在此基础上用future封装了一层,并将执行过程中产生的异常全部封装在一个变量中:

public void run() {        if (state != NEW ||!UNSAFE.compareAndSwapObject(this, runnerOffset,     null, Thread.currentThread()))return;        try {Callable<V> c = callable;if (c != null && state == NEW) {    V result;    boolean ran;    try {        result = c.call();        ran = true;    } catch (Throwable ex) {        result = null;        ran = false;        setException(ex);    }    if (ran)        set(result);}        } finally {runner = null;int s = state;if (s >= INTERRUPTING)    handlePossibleCancellationInterrupt(s);        }    }protected void setException(Throwable t) {        if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {outcome = t;UNSAFE.putOrderedInt(this, stateOffset, EXCEPTIONAL); // final statefinishCompletion();        }    }

另外,spring中的schedule注解借鉴使用了submit的处理方式。

5、匿名内部类

public class ThreadCreator {    public static void main(String[] args) {        //继承Thread类        new Thread() {@Overridepublic void run() {    System.out.println("extends Thread Class!");}        }.start();        //实现Runnable接口        new Thread(new Runnable() {@Overridepublic void run() {    System.out.println("implement Runnable!");}        }).start();        //实现Callable接口        new Thread(new FutureTask<Integer>(new Callable() {@Overridepublic Integer call() throws Exception {    return 1024;}        })).start();        //lambda表达式        new Thread(() -> System.out.println("execute single code")).start();        new Thread(() -> {System.out.println("execute multiple code");        }).start();    }}

lambda线程池:

public class ThreadCreator {    static ExecutorService service = Executors.newFixedThreadPool(5);    static List list = new ArrayList();    public static void main(String[] args) {        service.execute(() -> execute()); //无返回值        Future future = service.submit(() -> execute()); //有返回值        list.add(future);    }    public static void execute() {        //do something    }}

推荐相关文章教程:java快速入门

以上就是关于java中创建线程的方式的总结的详细内容,更多请关注其它相关文章!


  • 上一条:
    java如何将java项目生成为jar文件
    下一条:
    Java Web常见面试题
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在java中实现的脱敏工具类代码示例分享(0个评论)
    • zookeeper安装流程步骤(0个评论)
    • 在java中你背的“八股文”可能已经过时了(2个评论)
    • 在php8.0+版本中使用属性来增加值代码示例(3个评论)
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2018-03
    • 2020-03
    • 2023-05
    • 2023-11
    • 2024-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客