java多线程学习笔记(一)——多线程的创建
来源:互联网 发布:人工智能投资机会 编辑:程序博客网 时间:2024/04/23 22:20
java多线程创建有三种方式:
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口
代码示例:
1.继承Thread类代码实现
public class ThreadDemo1 extends Thread{ public static void main(String[] args) { //main线程先执行 System.out.println(Thread.currentThread().getName()+" is running."); ThreadDemo1 th1=new ThreadDemo1(); //调用start方法才会启动线程 th1.start(); //main线程有可能会在子线程执行完之前结束 System.out.println(Thread.currentThread().getName()+" is end."); } //重新父类run方法 @Override public void run() { //循环做延迟操作 for(int i=0;i<10;i++) { System.out.println(Thread.currentThread().getName()+" is running.i="+i); } }}
2.实现Runnable接口
public class ThreadDemo2 implements Runnable{ public static void main(String[] args) { System.out.println(Thread.currentThread().getName()+" is running."); Thread th=new Thread(new ThreadDemo2()); th.start(); //实现匿名内部类实现 Thread th1=new Thread(new Runnable() { @Override public void run() { // 循环做延迟操作 for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + " is running.i=" + i); } } }); th1.start(); //使用lambda表达式实现 Thread th2=new Thread(()-> { // 循环做延迟操作 for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + " is running.i=" + i); } }); th2.start(); System.out.println(Thread.currentThread().getName()+" is end."); } @Override public void run() { // 循环做延迟操作 for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + " is running.i=" + i); } }}
3 实现Callable接口
public class ThreadDemo3 implements Callable<Integer>{ public static void main(String[] args) throws InterruptedException, ExecutionException { System.out.println(Thread.currentThread().getName()+" is start"); ThreadDemo3 thCallable=new ThreadDemo3(); FutureTask<Integer> ft=new FutureTask<Integer>(thCallable); Thread th=new Thread(ft); th.start(); //调用FutureTask的get方法获取结果,主线程会阻塞到子线程结束,不调用get方法主线程会提前结束 System.out.println("计算从1到100之和为:"+ft.get()); System.out.println(Thread.currentThread().getName()+" is end"); } //计算从1到100之和 @Override public Integer call() throws Exception { int sum=0; for(int i=1;i<=100;i++) { sum+=i; } System.out.println(Thread.currentThread().getName()+" count is done"); return sum; }}
总结:
- java只支持单继承,实现接口的方式比继承Thread类常用。
- 匿名内部类、lambda表达式精简代码。
- Callable解决了没有返回值的问题。
阅读全文
0 0
- java多线程学习笔记(一)——多线程的创建
- Java多线程学习总结(一)——多线程创建
- 《Java多线程编程核心技术》学习笔记(一)——Java的多线程
- java多线程学习笔记(一)!更好的理解多线程
- Java学习笔记之——多线程(一)
- Java学习笔记——多线程(一)
- JAVA多线程技术学习笔记(一)——多线程基本概念
- Java多线程学习笔记(一)——Java的非线程安全问题
- java多线程学习(二)——线程的创建
- Java多线程 学习笔记(一)
- Java多线程学习笔记(一)
- JAVA学习笔记--多线程(一)
- Java 多线程学习笔记 (一)interrupt
- Java多线程学习笔记(一)
- Java多线程学习笔记(一)
- Java多线程学习笔记(一)
- Java多线程技术学习笔记(一)
- Java多线程学习笔记(一)
- HttpClient教程(4.5.2)——前言
- org.json.JSONObject对象转json,json新增元素,根据json的key获取值。以及list对象格式字符串转jsonArray
- C++二进制文件读写简单操作
- 深入浅出低层次File_I/O分析
- 临时的登录界面
- java多线程学习笔记(一)——多线程的创建
- 编写程序,由用户输入四条指令,程序输出最后小车坐标。
- 五种模式的简单理解
- Project Euler Problem 4
- Android Activity和Intent机制学习笔记
- 安装vs2013时遇到:“build tools -amd64”错误
- Linux命令
- 二分图的几种模型算法以及证明(暂未加入例题)
- load data infile 导数据到mysql注意事项