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

作者:mrr 时间:2023-06-06 13:00:12 

先看一下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();
}
}

程序的运行结果是:

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

这是继承了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();
}
}

程序运行结果:

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

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

标签:java,多线程,实现方式
0
投稿

猜你喜欢

  • Android性能优化之plt hook与native线程监控详解

    2021-09-10 22:06:01
  • C#中实现网段扫描的代码

    2022-05-09 03:54:33
  • SpringBoot security安全认证登录的实现方法

    2021-05-30 08:09:56
  • JAVA JDK8 List分组获取第一个元素的方法

    2021-06-24 13:07:51
  • android实现通知栏下载更新app示例

    2022-01-06 01:58:56
  • java实现发送邮箱验证码

    2022-07-05 07:40:07
  • 基于IDEA中格式化代码的快捷键分享

    2022-08-15 14:58:03
  • java文件操作之java写文件简单示例

    2023-10-21 14:37:13
  • java生成随机数的方法

    2023-12-12 12:49:51
  • SpringDataElasticsearch与SpEL表达式实现ES动态索引

    2021-11-27 01:33:03
  • 彻底搞懂Java多线程(一)

    2023-08-02 10:42:30
  • java 定时同步数据的任务优化

    2021-09-18 19:48:22
  • Android自定义顶部标题栏

    2023-02-21 19:03:47
  • SpringBoot中的Aop用法示例详解

    2023-03-31 14:12:00
  • SpringBoot实现单文件与多文件上传功能

    2023-03-22 23:44:11
  • WPF实现半圆形导航菜单

    2023-06-09 07:02:56
  • Flutter适配深色模式的方法(DarkMode)

    2021-10-17 07:43:48
  • MyBatis-Plus解决逻辑删除与唯一索引的问题

    2022-09-09 00:17:03
  • Java创建ZIP压缩文件的方法

    2022-10-05 05:05:23
  • springboot中validator数据校验功能的实现

    2021-07-31 17:43:50
  • asp之家 软件编程 m.aspxhome.com