网站首页 > java教程 正文
前言
上篇文章已经说清了线程的生命周期和一些基础,本章主要讲在JAVA中创建线程的几种方式。
创建线程的几种方式
1、实现Runnable接口
public class CreateThreadDemo {
static class RunnableDemo implements Runnable {
@Override
public void run() {
System.out.println("已经运行了RunnableDemo。。");
}
}
public static void main(String[] args) {
Thread thread = new Thread(new RunnableDemo());
thread.start();
}
}
这种方法实现了Runnable接口,这样的话,具体的实现就放在RunnableDemo中,这样的RunnableDemo具体的业务处理就在RunnableDemo.run()方法中处理了,参数的传递的话,也可以在RunnableDemo类中设定。这种方法在日常开发中也是挺常见的一种形式。
2、继承Thread类;但是Thread也是实现了Runnable接口。
public class CreateThreadDemo {
static class ThreadDemo extends Thread {
@Override
public void run() {
System.out.println("已经运行了ThreadDemo。。");
}
}
public static void main(String[] args) {
ThreadDemo threadDemo = new ThreadDemo();
threadDemo.start();
}
}
有些人可能会很好奇,Thread.start后最终会调用run方法去执行里面的程序。这个在后面使用锁知识的时候再来讲这块。
3、实现Callable接口
public class CreateThreadDemo {
static class CallableDemo implements Callable<Integer> {
@Override
public Integer call() throws Exception {
System.out.println("CallableDemo执行了");
return 1;
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
Callable callable = new CallableDemo();
ExecutorService threadPool = Executors.newSingleThreadExecutor();
Future<Integer> future = threadPool.submit(callable);
System.out.println(future.get());
//注意,这里用完线程池,记得关掉
threadPool.shutdown();
}
}
有些人会很好奇,为啥你会知道使用Executors呢?
其实在官方文档中也指出了可以用Executors去创建线程池来执行Callable接口的实现类。
总结
从上面不难看出,在JAVA中创建线程大概有以上3种方式,前两种是去实现Runnable接口,而后者去实现类Callable接口。两者不同的区别是,后者是可以返回值的。后面再详细源码分析。
一天一个java相关小知识。喜欢的同学,可以点赞、关注+收藏,后期还会推出其他框架源码分析。
如果有需要补充的地方,留言区见。
猜你喜欢
- 2024-11-23 不清楚Java线程池实现原理?那你应该收藏这篇文章!「源码分析」
- 2024-11-23 Java基础——Java多线程(线程的创建方式)
- 2024-11-23 「一文搞懂」Java线程池实现原理
- 2024-11-23 Java线程池
- 2024-11-23 java线程池实现原理以及应用场景说明
- 2024-11-23 快速弄懂Java线程池
- 2024-11-23 java线程池原理浅析
- 2024-11-23 彻底了解线程池的原理——40行从零开始自己写线程池
- 2024-11-23 Java并发编程(8):Executor框架 - 可扩展线程池WorkStealingPool
- 2024-11-23 java中的线程池
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)