Java多线程的几种写法
发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,Java多线程的在开发中用到的很多,简单总结一下几种写法,分别是继承Thread方法,实现Runnable接口,实现Callable接口;1.继承Thread方法class TestThread ex
千家信息网最后更新 2025年01月28日Java多线程的几种写法
Java多线程的在开发中用到的很多,简单总结一下几种写法,分别是继承Thread方法,实现Runnable接口,实现Callable接口;
1.继承Thread方法
class TestThread extends Thread{ String name; public TestThread(String name){ this.name=name; } @Override public void run() { for (int i = 0; i < 6; i++) { System.out.println(this.name+":"+i); } }}
main方法调用:
Thread启动有两个方法,一个是start()方法,一个是run()方法,但是直接调用run方法时线程不会交替运行,而是顺序执行,只有用start方法时才会交替执行
TestThread tt1 = new TestThread("A"); TestThread tt2 = new TestThread("B"); tt1.start(); tt2.start();
运行结果:
2.实现Runnable接口,有多种写法
2.1外部类
class TestRunnable implements Runnable{ String name; public TestRunnable(String name){ this.name=name; } @Override public void run() { for (int i = 0; i < 6; i++) { System.out.println(this.name+":"+i); } }}
调用:
TestRunnable tr1 = new TestRunnable("C"); TestRunnable tr2 = new TestRunnable("D"); new Thread(tr1).start(); new Thread(tr2).start();
2.2匿名内部类方式
new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start();
2.3 Lamda表达式,jdk1.8,只要是函数式接口,都可以使用Lamda表达式或者方法引用
new Thread(()->{ for (int i = 0; i < 6; i++) { System.out.println(i); } }).start();
2.4ExecutorService创建线程池的方式
class TestExecutorService implements Runnable{String name;public TestExecutorService(String name){ this.name=name;} @Override public void run() { for (int i = 0; i < 6; i++) { System.out.println(this.name+":"+i); } }}
调用:可以创建固定个数的线程池
ExecutorService pool = Executors.newFixedThreadPool(2); TestExecutorService tes1 = new TestExecutorService("E"); TestExecutorService tes2 = new TestExecutorService("F"); pool.execute(tes1); pool.execute(tes2); pool.shutdown();
运行结果跟2.1差不多
3.实现Callable接口,可以返回结果
//Callable提供返回数据,根据需要返回不同类型class TestCallable implements Callable{ private int ticket = 5; @Override public String call() throws Exception { for (int i = 0; i < 5; i++) { if(this.ticket>0) System.out.println("买票,ticket="+this.ticket--); } return "票卖完了"; }}
调用:
Callable tc = new TestCallable(); FutureTask task = new FutureTask(tc); new Thread(task).start(); try { System.out.println(task.get());//获取返回值 } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); }
运行结果:
方法
接口
线程
结果
运行
写法
方式
表达式
不同
差不多
两个
个数
中用
函数
只有
多种
完了
数据
类型
而是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
搭建数据库服务器
10年软件开发经验工资多少
互联网科技总结
数据库连接加密
益阳口碑好的软件开发费用
济南软件开发上市公司有哪些
珠海尊信软件开发
简述网络技术的实际应用程序
铜陵餐饮软件开发
想学网络技术多少钱
吃鸡服务器老是掉线
软件开发资质公司
网络安全宣传周启动仪式工地
魅族手机数据库用户名
网络安全如何释放技术
网络技术副总面试题
信管专业能考网络安全工程师吗
怎样做一个代理服务器
珠海无纸化会议管理服务器厂商
大学生网络安全提问
力控向数据库插入实型字段
软件开发类的供销合同
盛邦网络安全科技有限公司
河北电子软件开发诚信服务
网络安全政策法律动态
数据库索引加多了慢
大专考研软件开发的大学
网络安全研发前景
网络安全第三版课后答案
珠海无纸化会议管理服务器厂商