我是靠谱客的博主 心灵美手机,这篇文章主要介绍java是多线程的吗,现在分享给大家,希望可以做个参考。

java是多线程的,使用多线程有三种方法:继承Thread类、实现Runnable接口和使用Callable和Future创建线程。

继承Thread类 (推荐学习:java课程 )

实现方式很简单,只需要创建一个类去继承Thread类然后重写run方法,在main方法中调用该类实例对象的start方法即可实现多线程并发。代码:

复制代码
1
2
3
4
5
6
7
public class MyThread extends Thread { @Override public void run(){ super.run(); System.out.println("执行子线程..."); } }
登录后复制

测试用例:

复制代码
1
2
3
4
5
6
7
public class Test { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); System.out.println("主线程..."); } }
登录后复制

运行结果:

java-1.jpg

实现Runnable接口

这种方式的实现也很简单,就是把继承Thread类改为实现Runnable接口。代码如下:

复制代码
1
2
3
4
5
6
public class MyRunnable implements Runnable { @Override public void run() { System.out.println("执行子线程..."); } }
登录后复制

测试用例:

复制代码
1
2
3
4
5
6
7
8
public class Test { public static void main(String[] args) { Runnable runnable = new MyRunnable(); Thread thread = new Thread(runnable); thread.start(); System.out.println("主线程运行结束!"); } }
登录后复制

运行结果:

java-2.jpg

使用Callable和Future创建线程

上面的两种方式都有这两个问题:

无法获取子线程的返回值

run方法不可以抛出异常

为了解决这两个问题,我们就需要用到Callable这个接口了。说到接口,上面的Runnable接口实现类实例是作为Thread类的构造函数的参数传入的,之后通过Thread的start执行run方法中的内容。但是Callable并不是Runnable的子接口,是个全新的接口,它的实例不能直接传入给Thread构造,所以需要另一个接口来转换一下。

以这里面其实就是要比上一个方法再多一个转换过程,最终一样是通过Thread的start来创建新线程。有了这个思路,代码就很容易理解了:

复制代码
1
2
3
4
5
6
7
8
9
import java.util.concurrent.Callable; public class MyCallable implements Callable { int i = 0; @Override public Object call() throws Exception { System.out.println(Thread.currentThread().getName()+" i的值:"+ i); return i++; //call方法可以有返回值 } }
登录后复制

测试:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Test { public static void main(String[] args) { Callable callable = new MyCallable(); for (int i = 0; i < 10; i++) { FutureTask task = new FutureTask(callable); new Thread(task,"子线程"+ i).start(); try { //获取子线程的返回值 System.out.println("子线程返回值:"+task.get() + "n"); } catch (Exception e) { e.printStackTrace(); } } } }
登录后复制

执行结果(部分):

java-3.jpg

以上就是java是多线程的吗的详细内容,更多请关注靠谱客其它相关文章!

最后

以上就是心灵美手机最近收集整理的关于java是多线程的吗的全部内容,更多相关java是多线程内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(110)

评论列表共有 0 条评论

立即
投稿
返回
顶部