Java创建线程的方式解析
更新时间:2022年07月28日 11:25:15 作者:0x3f3f3f3f
这篇文章主要介绍了Java创建线程的方式解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
继承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在javajava中,有@FunctionalInterface@FunctionalInterface注解意味着该接口只有一个抽象方法,即可以用lambdalambda表达式的方式简化
@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<Integer> task = new FutureTask<>(() -> {
log.debug("running");
Thread.sleep(1000);
return 100;
});
/*
用lambda化简前
*/
FutureTask<Integer> task1 = new FutureTask<>(new Callable<Integer>() {
@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);
}
}到此这篇关于Java创建线程的方式解析的文章就介绍到这了,更多相关Java创建线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Boot源码实现StopWatch优雅统计耗时
这篇文章主要为大家介绍了Spring Boot源码实现StopWatch优雅统计耗时,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-07-07
Java8 Stream collect(Collectors.toMap())的使用
这篇文章主要介绍了Java8 Stream collect(Collectors.toMap())的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-05-05


最新评论