/**
* @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(); }
}

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

  1. tomcat常用配置详解和优化方法

    tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...

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

    rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...

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

    mkdir命令详解及使用方法实战 名称 MKDIR 是 make directories 的缩写 使用方法 mkdir [选项(如-p)] ...目录名称(及子目录注意用分隔符隔开)...    如使 ...

  4. 【转载】详解CreateProcess调用内核创建进程的过程

    原文:详解CreateProcess调用内核创建进程的过程 昨天同学接到了腾讯的电面,有一题问到了CreateProcess创建进程的具体实现过程,他答得不怎么好吧应该是, 为了以防万一,也为了深入学 ...

  5. 图文详解 IntelliJ IDEA 15 创建 Maven 构建的 Java Web 项目(使用 Jetty 容器)

    图文详解 IntelliJ IDEA 15 创建 maven 的 Web 项目 搭建 maven 项目结构 1.使用 IntelliJ IDEA 15 新建一个项目.  2.设置 GAV 坐标  3. ...

  6. 多线程-创建线程第二种方式-实现Runnable接口-细节和好处

    1 package multithread2; 2 3 /* 4 * 创建线程的第一种方法:继承Thread类 5 * 6 * 创建线程的第二种方式:实现Runnable接口 7 * 8 * 1,定义 ...

  7. 【多线程】创建线程方式二:实现Runnable接口

    创建线程方式二:实现Runnable接口 代码示例: /** * @Description 实现Runnable接口,重写run方法,执行线程需要丢入Runnable接口实现类,调用start方法 * ...

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

    pwd:查看当前工作目录 前言: Linux中用 pwd 命令来查看”当前工作目录“的完整路径,就是经常提及的所在目录,多用在生产环境多级目录中查看当前所在路径,使用此命令能给运维人员/操作人员带来很 ...

  9. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)

    IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...

随机推荐

  1. Allegro PCB Design GXL (legacy) 从dxf文件中导入板框

    Allegro PCB Design GXL (legacy) version 16.6-2015 新建brd文件,并设置好相应的参数之后,点击菜单:File > Import > DXF ...

  2. C++ 使用LockWorkStation()的过程遇到的问题

    关于函数“LockWorkStation()”,参见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa376875.aspx Ho ...

  3. 步步为营-93-MVC+EF简单实例

    1:创建MVC项目 2:添加EF数据(这里选择DataBaseFirst模式) 3:添加控制器 3.1.1 创建列表页面 3.1.2 html页面 @using MvcApplication1 @{ ...

  4. jsp和

  5. OpenCV-Python教程8-图像混合

    一.图片相加 要叠加两张图片,使用cv2.add(),相加两幅图片的形状(高度.宽度.通道数)必须相同.numpy中可以直接用res = img1 + img2相加.但是两者的结果并不相同 impor ...

  6. Elasticsearch和HDFS 容错机制 备忘

    1.Elasticsearch 横向扩容以及容错机制http://www.bubuko.com/infodetail-2499254.html 2.HDFS容错机制详解https://www.cnbl ...

  7. delphi使用sqlite数据库时的中文路径问题

    https://blog.csdn.net/yuehaiyang/article/details/4184198 如果数据库所在的路径是中文路径的话,根本运行不起来,会报错,因为sqlite用的是ut ...

  8. Spring MVC基础知识整理➣数据校验与格式化

    概述 将view中Form的数据提交到后台之后,后台如何验证数据的有效性?在这里Spring MVC提供了相应的Hibernate类包(hibernate-validator-4.3.1.Final. ...

  9. JSP基础知识➣获取参数和过滤器(四)

    JSP表单提交和参数获取 JSP表单提交的两种方式:post和get,通过这两种方式提交的参数到后台,获取参数的值主要由request来处理,获取值的方式有以下几种: getParameter():  ...

  10. python2 python3 转换,兼容

    0. 1.参考 https://docs.python.org/3/library/urllib.html urllib is a package that collects several modu ...