欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-07 21:37:09
先看一下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(); 
 } 
} 

程序的运行结果是:

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产生多个线程。