详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数

/**
 * @author zhao
 * @TIME 0419 22:56  End
 *定义线程的第二种方法:实现Runnable接口
 *步骤:1,定义一个子类实现Runnable接口
 *    2,在子类中覆盖run()方法,并且将多线程锁执行的代码写入run方法中
 *    3,通过Thread类建立线程对象;
 *    4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
  为什么要将Runnable接口的子类对象传递给Thread的构造函数。
  因为,自定义的run方法所属的对象是Runnable接口的子类对象。
  所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
顿悟 (结合今天刚看的入门问题:
 1,在Test项目中java.Iduction.test中,String s ="Hello world";String string =s;
 注意:s不是一个对象,而是一个String类型的引用,指向对象
 同理:为什么要将Runnable接口的子类对象传递给Thread的构造函数。
 
 */
//举例:定义一个卖票程序
package ThreadDemoOne;
class Ticket implements Runnable //实现接口,注意英语单词
{
 private int tick =100;//定义票数为100张
 public void run()
 {
  while(true)//true true true 写错过两遍了。while(True)就是执行循环。
  {
   if(tick>0)
   {
    System.out.println("售票员编号"+Thread.currentThread().getName()+"这是第"+tick+"张票");
    tick--;
   }
  }
 }
}
public class ThreadDemo4
{
 public static void main(String[] args )
 {
  Ticket t=new Ticket();//声明一个Ticket类型的对象的“引用”,这个引用指向Ticket对象
  Thread t1=new Thread(t);//创建一个线程,声明一个Thread类型的t1变量,t1变量又指向了t所指向的变量。
  Thread t2=new Thread(t);
  Thread t3=new Thread(t);
  Thread t4=new Thread(t);
  /*new Thread(t)中的t不是一个对象,而是一个声明为Ticket类型的变量,t指向这个对象
   * 而将t1~t4指向t,t又是指向run方法中的对象,即线程t1~t4指向ticket对象
   * 如果不指向对象,线程将不知道执行哪个run方法。
   */
  //t1.run();犯错误了,注意不能是run方法,应该是start方法
  t1.start();
  t2.start();
  t3.start();
  t4.start();

}
}

时间: 2024-10-13 19:47:07

详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数的相关文章

POSIX 线程详解(2-线程创建和销毁)

算法旨在用尽可能简单的思路解决问题,理解算法也应该是一个越看越简单的过程,当你看到算法里的一串概念,或者一大坨代码,第一感觉是复杂,此时不妨从例子入手,通过一个简单的例子,并编程实现,这个过程其实就可以理解清楚算法里的最重要的思想,之后扩展,对算法的引理或者更复杂的情况,对算法进行改进.最后,再考虑时间和空间复杂度的问题. 了解这个算法是源于在Network Alignment问题中,图论算法用得比较多,而对于alignment,特别是pairwise alignment, 又经常遇到maxim

【详解】消息队列和线程关系

1.进程-线程-消息队列 简单的来说,什么是进程?什么是线程?打个比方,你的程序要执行,操作系统就会把你的exe文件加载到内存中,那就生成一个进程了(当然还包含分配到的资源等):对于线程,你可以理解成是一个程序里的不同部分,这有点类似函数,所不同的是各个线程是同时执行的. 例如,你的主线程创建了另一个副线程,那么这两个线程是同时在工作的,不存在调用 - 返回的概念. 一个进程里可以有多个线程在执行,称为执行实例. shining:因为线程的资源是从进程资源中分配出来的,因此同一个进程中的多个线程

linux rm 命令详解及使用方法实战【初级】

rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就提到了rm命令,现在我们来详细介绍一下linux中删除文件和目录的命令, rm命令,rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件均保持不变. 名称 rm - remove files o

linux mkdir 命令详解及使用方法实战【初级】

mkdir命令详解及使用方法实战 名称 MKDIR 是 make directories 的缩写 使用方法 mkdir [选项(如-p)] ...目录名称(及子目录注意用分隔符隔开)...    如使用mkdir建立一个多级目录则要使用-P命令 如: mkdir /lcp 是在根(/)目录下建立一个名为lcp的文件夹 mkdir -p /lcp/abc 则是在根(/)目录下建一个名为lcp的文件夹同时在此文件夹中建立名为abc的文件夹 描述 创建目录(IES),如果他们不存在. 长选项必须用的参

linux pwd 命令详解及使用方法实战【初级】

pwd:查看当前工作目录 前言: Linux中用 pwd 命令来查看”当前工作目录“的完整路径,就是经常提及的所在目录,多用在生产环境多级目录中查看当前所在路径,使用此命令能给运维人员/操作人员带来很多方便,当你不确定在什么目录下时即可直接键入此命令来进行“定位”. 上次分享的mkdir 命令详解及使用方法实战[初级]中提到过pwd当时只是简单的概括了一句,此处给大家详细讲解一下pwd使用方法,从而在将来的生产环境中更好的驾驭linux操作系统. 名称 pwd-print name of cur

ListView使用详解,listActivity使用方法

OPhone开发中经常会用到各种各样的组件,像TextView,Button等等.其中经常会使用到ListView(列表),ListView以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.本篇将由浅入深的介绍几种列表,并着重介绍如何自定义列表.具体的表现形式如图1所示.在OPhone系统中,列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View. 2.适配器 用来把数据映射到ListView上的中介. 3.数据    具体的将被映射的字符串,图片,或者基本组件. 根据

AIX下PVID详解及其修改方法

AIX 下 PVID 详解及其修改方法 1.PVID 是什么 PVID 全称 physical volume identifier,它非常重要,相当于软序列号,当把一个磁盘变成 PV 时, 就生成了 PVID , PVID 是由机器序列号 (uname -m的前 8位 ) 和它生成的时间组成,这种机制保证了 PVID 的唯一性.当系统启动时,磁盘配置程序会寻找磁 盘上的 PVID ,并把它跟 ODM 库中的 PVID 信息进行比 对,如果在 ODM 中找到匹配的条目,则把和这个 PVID 相对应

java5线程池详解与Executors类创建不同线程池的用法

java中的线程池是非常重要的,它可以节省资源开销,从而提升程序的性能.向Tomcat等一些web服务器都必须用到线程池.java5中为我们提供了一些应用线程池的API,下面的代码将详解其用法. package hxl.insist; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorSer

Tomcat记录-tomcat常用配置详解和优化方法

常用配置详解 1 目录结构 /bin:脚本文件目录. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载). /conf:存放配置文件,最重要的是server.xml. /logs:存放日志文件. /server/webapps:来管理Tomcat-web服务用的.仅对TOMCAT可见,对所有的WEB APP都不可见(使用Catalina类加载器加载). /shared/lib:仅对所有WEB APP可见,对TOMCAT不可见(使用Shared类加载