创建线程的方式

网友投稿 787 2022-10-26

创建线程的方式

创建线程的方式

继承Thread,这里使用匿名内部类

@Slf4j(topic = "c.Test1") public class Test1 { public static void main(String[] args) { //创建线程对象 Thread t = new Thread(){ @Override public void run() { //要执行的任务 log.debug("running"); } }; //设置线程的名字 t.setName("t1"); //启动线程 t.start(); log.debug("running"); } } /* 19:44:31.998 [main] DEBUG c.Test1 - running 19:44:31.998 [t1] DEBUG c.Test1 - running */

实现Runnable接口,配合Thread类,同样用匿名内部类

把线程和任务分开Thread表示线程Runnable代表可运行的任务

@Slf4j(topic = "c.Test2") public class Test2 { public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { //要执行的任务 log.debug("running"); } }; //创建线程对象 Thread t = new Thread(runnable, "t2"); //启动线程 t.start(); } } //19:52:27.646 [t2] DEBUG c.Test2 - running

在$java$中,有$@FunctionalInterface$注解意味着该接口只有一个抽象方法,即可以用$lambda$表达式的方式简化

@Slf4j(topic = "c.Test2") public class Test2 { public static void main(String[] args) { Runnable runnable = () -> { //要执行的任务 log.debug("running"); }; //创建线程对象 Thread t = new Thread(runnable, "t2"); //启动线程 t.start(); } }

FutureTask配合Thread

因为FutureTask可以接口一个Callable类型的参数,用来处理有返回值的情况

@Slf4j(topic = "c.Test3") public class Test3 { public static void main(String[] args) throws ExecutionException, InterruptedException { //创建任务对象 FutureTask task = new FutureTask<>(() -> { log.debug("running"); Thread.sleep(1000); return 100; }); /* 用lambda化简前 */ FutureTask task1 = new FutureTask<>(new Callable() { @Override public Integer call() throws Exception { log.debug("running"); Thread.sleep(1000); return 100; } }); //参数1是任务的对象, 参数2是线程的名字 Thread t = new Thread(task, "t3"); t.run(); //主线程堵塞,同步等待task执行完毕的结果 Integer integer = task.get(); log.debug("结果是:{}", integer); } }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于SSM框架下各层的解释说明(Controller等)
下一篇:Rat: 编写shell命令来构建交互式终端应用程序
相关文章

 发表评论

暂时没有评论,来抢沙发吧~