• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java是多线程的吗

java 搞代码 4年前 (2022-01-09) 38次浏览 已收录 0个评论

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

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

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

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是多线程的吗的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java是多线程的吗

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址