java线程写法_Java多线程的几种写法

本文总结了Java中实现多线程的三种主要方法:继承Thread类、实现Runnable接口和实现Callable接口。通过示例代码详细展示了每种方式的用法,并提及了ExecutorService线程池的创建与使用。此外,Callable接口允许线程返回结果。
摘要由CSDN通过智能技术生成

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();

运行结果:

982b1129498d8666cb3e114eae996477.png

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差不多

0c1dfa79d18e19639bd75dcbff40baf8.png

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();

}

运行结果:

39fac6bd60807ef65ae82e626149ca23.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值