请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

java知识分享-我的java记事本

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 259|回复: 0

实现多线程的两种方法:Thread与Runable

[复制链接]

126

主题

127

帖子

510

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
510
发表于 2017-5-29 21:23:50 | 显示全部楼层 |阅读模式
实现多线程有两种方式:(自JDK1.5之后有三种,最后一种并不常用)
(1).继承Thread类
(2).实现Runnable接口(Callable接口)
一个类如果实现了Runnable接口或者继承了Thread类,那么它就是一个多线程类,如果是要实现多线程,还需要重写run()方法,所以run() 方法是多线程的入口。
但是在启动多线程的时候,不是从run()方法开始的,而是从start()开始的 理由是:当执行多线程的时候,每一个线程会抢占资源,而操作系统会为其分配资源,在start()方法中不仅执行了多线程的代码,除此还调用了一个start0()方法,该方法的声明是native,在Java语言中用一种技术叫做JNI,即JavaNativeInterface,该技术特点是使用Java调用本机操作系统提供的函数,但是有一个缺点是不能离开特定的操作系统,如果线程需要执行,必须有操作系统去分配资源,所以此操作主要是JVM根据不同的操作系统来实现的
如果多线程是通过实现Runnable接口来实现的,那么与通过继承Thread来实现有一个区别,那就是多线程的启动方式——必须是通过start()来启动,但是Runnable接口只有一个方法,并没有start()方法,所以在启动多线程的时候必须调用Thread类的一个构造方法——Thread(Runnable target),该构造方法得到了Runnable接口的一个实现,于是就可以调用Thread类的start()方法了。
多线程的两种实现方式的区别:
(1).Thread是Runnable接口的子类,实现Runnable接口的方式解决了Java单继承的局限
(2).Runnable接口实现多线程比继承Thread类更加能描述数据共享的概念
public class Thread_Runnable implements Runnable {
int ticket=10;
@Override  public void run()
{   
for (int i = 0; i < 100; i++) {  
   if(ticket>0){  
     System.out.println(ticket--);
     }
  }  
}  
public static void main(String[] args) {
     Thread_Runnable Thread_Runnable=new Thread_Runnable();  
      new Thread(Thread_Runnable).start();   
     new Thread(Thread_Runnable).start();  
     new Thread(Thread_Runnable).start();  
  MyThread myThread1=new MyThread();  
      MyThread myThread2=new MyThread();
      MyThread myThread3=new MyThread();   
      myThread1.start();
       myThread2.start();  
      myThread3.start();     
}
} class MyThread extends Thread{
int ticket=10;
@Override  public void run() {
  for (int i = 0; i < 100; i++) {
     if(ticket>0){   
               System.out.println(ticket--);
     }   
  }   
  }
}
实现Runnable的多线程指挥执行10次,继承Thread类的多线程会执行30次,每个线程10次。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|java知识分享 ( 闽ICP备14003021号-4   

GMT+8, 2017-10-19 11:25 , Processed in 0.139867 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表