当前位置: 首页 > 编程笔记 >

Java多线程的实现方式比较(两种方式比较)

孔鸿云
2023-03-14
本文向大家介绍Java多线程的实现方式比较(两种方式比较),包括了Java多线程的实现方式比较(两种方式比较)的使用技巧和注意事项,需要的朋友参考一下

先看一下java线程运行时各个阶段的运行状态

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。

在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。

线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

多线程主要是为了节约CPU时间,发挥利用,线程的运行中需要使用计算机的内存资源和CPU。

多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

java实现多线程有两种方法

1、继承Thread类

2、实现Runnable接口

这两种方法的共同点:

不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。

两种方法的不同点:

1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承

2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性

基于以上两点所以建议用第二种方法

下面用例子来做说明

程序1:

package com.dr.runnable1;
//一个类只要继承了Thread类,则此类就是多线程类
class MyThread extends Thread
{
 private String name;
 public MyThread(String name)
 {
  this.name=name;
 }
 //如果要使用多线程,则必须有一个方法的主体
 public void run()
 {
  //打印输出
  for(int i=0;i<10;i++)
  {
   System.out.println(this.name+"----->运行、、、、");
  }
 }
}
public class Demo1 {
 public static void main(String args[])
 {
//第一种方法
   Runnable r1=new MyThread("线程A");
  Runnable r2=new MyThread("线程B");
  Runnable r3=new MyThread("线程C");
  Thread t1=new Thread(r1);
  Thread t2=new Thread(r2);
  Thread t3=new Thread(r3);
  t1.start();
  t2.start();
  t3.start();
 //  mt1.run();//线程执行,使用start方法
//  mt2.run();
//  mt3.run();
//第二种方法
//  MyThread mt1=new MyThread("线程A");
//  MyThread mt2=new MyThread("线程B");
//  MyThread mt3=new MyThread("线程C");
//  mt1.start();
//  mt1.start();//线程只能启动一次
//  mt2.start();
//  mt3.start(); 
 } 
} 

程序的运行结果是:

这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程

第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程

程序2:

package com.dr.runnable1;
class MyThread1 implements Runnable
{
 private int ticket=10;
 public void run()
 {
  for(int i=0;i<500;i++)
  {
   if(this.ticket>0)
   {
    System.out.println("卖票----->"+(this.ticket--));
   }
  }
 }
}
public class Demo2 {
 public static void main(String args[])
 {
   MyThread1 mt=new MyThread1();
  Thread t1=new Thread(mt);
  Thread t2=new Thread(mt);
  Thread t3=new Thread(mt);
  t1.start();
  t2.start();
  t3.start();
 } 
} 

程序运行结果:

这个程序是实现Runnable了,产生一类的实例对象,然后用Thread产生多个线程。

 类似资料:
  • 本文向大家介绍浅谈Java的两种多线程实现方式,包括了浅谈Java的两种多线程实现方式的使用技巧和注意事项,需要的朋友参考一下 本文介绍了浅谈Java的两种多线程实现方式,分享给大家。具有如下: 一、创建多线程的两种方式 Java中,有两种方式可以创建多线程: 1 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2 通过实现Runnable接口,实例化Threa

  • 本文向大家介绍Java多线程中的单例模式两种实现方式,包括了Java多线程中的单例模式两种实现方式的使用技巧和注意事项,需要的朋友参考一下 Java多线程中的单例模式 一、在多线程环境下创建单例 方式一: 方式二: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 本文向大家介绍详解springMVC两种方式实现多文件上传及效率比较,包括了详解springMVC两种方式实现多文件上传及效率比较的使用技巧和注意事项,需要的朋友参考一下 springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传。这两种方式对于实现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这

  • 本文向大家介绍Java 多线程有几种实现方式?相关面试题,主要包含被问及Java 多线程有几种实现方式?时的应答技巧和注意事项,需要的朋友参考一下 有4种,分别是: 继承Thread类 实现Runnable接口 实现Callable接口通过FutureTask包装器来创建Thread线程 通过线程池创建线程,使用线程池接口ExecutorService结合Callable、Future实现有返回结

  • 背景: 项目中有需要将html下载成pdf的需求,我看项目中的实现思路是 利用html2Canvas库将html转换成图片; 利用jspdf库将canvas生成的图片转换成pdf格式。 后面发现html2pdf可以直接将html转换成pdf格式 示例代码如下 html2pdf下载链接:https://www.cdnpkg.com/html2pdf.js/file/html2pdf.bundle.m

  • 互联网上的两种主要的分发方式:HLS和RTMP,什么时候用谁,完全决定于应用场景。 还有其他的分发方式,这些分发方式不属于互联网常见和通用的方式,不予以比较: UDP:譬如YY的实时应用,视频会议等等,或者RTSP之类。这类应用的特点就是实时性要求特别高,以毫秒计算。TCP家族协议根本就满足不了要求,所以HTTP/TCP都不靠谱。这类应用没有通用的方案,必须自己实现分发(服务端)和播放(客户端)。

  • 本文向大家介绍Java多线程实现Runnable方式,包括了Java多线程实现Runnable方式的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了Java多线程实现Runnable方式的具体方法,供大家参考,具体内容如下 (一)步骤  1.定义实现Runnable接口  2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中。 3.通过Thread类建立线程对象

  • 本文向大家介绍java启动线程的3种方式对比分析,包括了java启动线程的3种方式对比分析的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java启动线程的方法,供大家参考,具体内容如下 1.继承Thread 2.实现Runnable接口 3.直接在函数体使用 4.比较: 实现Runnable接口优势: 1)适合多个相同的程序代码的线程去处理同一个资源 2)可以避免Java中的单继承