Java 实现多线程的三种方式

这篇具有很好参考价值的文章主要介绍了Java 实现多线程的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java 实现多线程的三种方式

1、三种方法的介绍和比较

1、1三种方式得介绍

1、继承Thread类
2、实现Runnable接口
3、实现Callable接口

1、2三种方法的介绍和比较
1、2、1、实现Runnable接口相比继承Thread类有如下优势

1、增强程序的健壮性,将业务逻辑与线程调度分离
2、线程池只能放入实现Runable或Callable类线程,不能直接放入继承Thread的类

1、2、2、实现Runnable接口和实现Callable接口的区别

1、Runnable是自从java1.1就有了,而Callable是1.5之后才加上去的
2、实现Callable接口的任务线程能返回执行结果,而实现Runnable接口的任务线程不能返回结果
3、Callable接口的call()方法允许抛出异常,而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛
4、加入线程池运行,Runnable使用ExecutorService的execute方法,Callable使用submit方法

2、如何创建线程

1、Thread
 public class ThreadExtends {
    public static void main(String[] args) {
        new MyThread("线程1").start();
        new MyThread("线程2").start();
    }
}



class MyThread  extends  Thread{
    private String name;

    public MyThread(String name) {
        this.name = name;
    }

    @Override
    public void run() {

        System.out.println("线程:"+name);
    }

}

join() 线程合并,哪一个线程调用这个方法,其他线程就进入阻塞状态,直到调用线程执行完毕,其他线程进入就绪状态,继续等待争夺 CPU 资源
join(long millis) 哪一个线程调用这个方法,这个线程在一段时间内独占CPU资源,其他线程就进入阻塞状态,直到时间过去,其他线程进入就绪状态,继续等待争夺 CPU 资源
getState() 得到调用线程的状态
stop() 停止该线程 已废弃
suspend() 暂停该线程 已废弃
resume() 恢复线程 在suspend后使用 已废弃
interrupt() 请求终止该线程 设置线程状态为中断,配合Thread.currentThread().isInterrupted()使用,使用案例参考下面代码文章来源地址https://www.toymoban.com/news/detail-432858.html

2、Runnable
public class MyRunnable {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                int i=0;
                while (!Thread.currentThread().isInterrupted()){{
                  i++;
                    System.out.println(Thread.currentThread().getName()+" | 计数:"+i);
                  if (i==10){
                      Thread.currentThread().interrupt();
                  }
                }
                }
            }
        };
        new Thread(runnable,"线程1").start();

    }
}
3、Callable
public class MyCallable {
    public static void main(String[] args) {
        Callable<String> callable = new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "线程1";
            }
        };
        FutureTask<String> task = new FutureTask<String>(callable);
        task.run();
        try {
        //获取Callable执行的结果 此方法会阻塞主线程直到获取返回结果
            System.out.println("返回值:"+task.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

到了这里,关于Java 实现多线程的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线程创建的三种方式

    目录 1. Thread类 2. Runnable接口 3. Callable接口 4. 线程的生命周期 新建  就绪 运行 阻塞 等待 结束 继承Thread类的方式创建线程 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务 创建Thread类的子类,即创建了线程对象 调用线程对象的

    2024年02月09日
    浏览(32)
  • C++创建线程的三种方式

    早期的C++并不支持多线程的创建,如果要创建多线程,依赖的是系统提供的一些方法(例如linux的 pthread). 从C++11以后开始,提供了std::thread线程库,因此我们可以创建std::thread类对象的方式来创建线程。创建的方式主要有三种: 通过函数指针 通过函数对象 通过lambda函数 使用

    2024年02月16日
    浏览(33)
  • Springboot中使用线程池的三种方式

    前言 多线程是每个程序员的噩梦,用得好可以提升效率很爽,用得不好就是埋汰的火葬场。 这里不深入介绍,主要是讲解一些标准用法,熟读唐诗三百首,不会作诗也会吟。 这里就介绍一下springboot中的多线程的使用,使用线程连接池去异步执行业务方法。 由于代码中包含详

    2024年02月08日
    浏览(37)
  • Java 创建多线程的三种方法

    在Java中创建多线程,往往都要通过Thread类来实现,今天学习下Java中创建多线程的三种方法[1]。 通过继承 Thread类 实现多线程。 主要方法: 1.void run(), 线程开启后,方法将被调用执行 2.void start(), 使此线程开始执行, Java虚拟机会调用run()方法 实现步骤: 1.定义类,继承 Thread类

    2024年02月05日
    浏览(45)
  • Java创建数组的三种方式

    这种一般用的比较多。 数组类型 [ ]  数组名称  =  new 数组类型 [ 数组长度 ] 

    2024年02月03日
    浏览(45)
  • Java创建文件的三种方式

    内容来自于韩顺平学Java 在学习其视频下跟着编写 文件创建成功

    2024年04月11日
    浏览(51)
  • Java数组的三种声明方式

    1.在开发中为什么要使用数组 如果开发中出现了大量的同一个类型的数据,按照现在所学的知识点,声明变量的话。如果一个变量存一个数据的话,那么就会需要多个变量了,相当麻烦。 使用数组: 只需要一个变量,然后数组中存很多的数据, 其实可以把数组想成 一个容器

    2024年02月05日
    浏览(37)
  • Appium/Selenium+Java的三种等待方式

    参考: java-selenium三种等待方式 Selenium+Java(六)Selenium 强制等待、显式等待、隐实等待 强制等待是利用time模块的sleep方法来实现,最简单粗暴的等待方法。 缺点:不能准确把握需要等待的时间(有时候操作未完成,等待就结束了,导致报错;有时候操作已经完成了,但时间

    2024年02月05日
    浏览(50)
  • java对接第三方接口的三种方式

    在日常工作中,经常需要跟第三方系统对接,我们做为客户端,调用他们的接口进行业务处理,常用的几种调用方式有: 1.原生的Java.net.HttpURLConnection(jdk); 2.再次封装的HttpClient、CloseableHttpClient(Apache); 3.Spring提供的RestTemplate; 当然还有其他工具类进行封装的接口,比

    2024年04月28日
    浏览(42)
  • 前端单点登录实现的三种方式

    1.同源不跨域 使用document.cookie或者localStorage可以直接存取 2.跨域主域名相同 可以使用cookie-js插件存储cookie,在设置cookie是添加domain参数,例如 Cookies.set(\\\'token\\\', 值, { expires: 60, path: \\\'\\\', domain: \\\'taobao.com\\\' }) 只有主域名相同,浏览器在访问时才会携带对应的 cookie 3.跨域 使用iframe内嵌

    2024年04月27日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包