java是多线程的吗

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

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

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

public class MyThread extends Thread {     @Override     public void run(){         super.run();         System.out.println("执行子线程...");     } }

测试用例:

public class Test {     public static void main(String[] args) {         MyThread myThread = new MyThread();         myThread.start();         System.out.println("主线程...");     } }

运行结果:

实现Runnable接口

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

public class MyRunnable implements Runnable {     @Override     public void run() {         System.out.println("执行子线程...");     } }

测试用例:

public class Test {     public static void main(String[] args) {         Runnable runnable = new MyRunnable();         Thread thread = new Thread(runnable);         thread.start();         System.out.println("主线程运行结束!");     } }

运行结果:

使用Callable和Future创建线程

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

无法获取子线程的返回值

run方法不可以抛出异常

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

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

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方法可以有返回值     } }

测试:

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是多线程的吗的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: java
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java显示1秒前,1分钟前,2分钟前,3天前

相关资讯