详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数
1 /** 2 * @author zhao 3 * @TIME 0419 22:56 End 4 *定义线程的第二种方法:实现Runnable接口(不考虑安全问题) 5 *步骤:1,定义一个子类实现Runnable接口 6 * 2,在子类中覆盖run()方法,并且将多线程锁执行的代码写入run方法中 7 * 3,通过Thread类建立线程对象; 8 * 4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。 9 为什么要将Runnable接口的子类对象传递给Thread的构造函数。 10 因为,自定义的run方法所属的对象是Runnable接口的子类对象。 11 所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。 12 顿悟 (结合今天刚看的入门问题: 13 1,在Test项目中java.Iduction.test中,String s ="Hello world";String string =s; 14 注意:s不是一个对象,而是一个String类型的引用,指向对象的地址 15 同理:为什么要将Runnable接口的子类对象传递给Thread的构造函数。 16 17 */ 18 //举例:定义一个卖票程序 19 package ThreadDemoOne; 20 class Ticket implements Runnable //实现接口,注意英语单词 21 { 22 private int tick =100;//定义票数为100张 23 public void run() 24 { 25 while(true)//true true true 写错过两遍了。while(True)就是执行循环。 26 { 27 if(tick>0) 28 { 29 System.out.println("售票员编号"+Thread.currentThread().getName()+"这是第"+tick+"张票"); 30 tick--; 31 } 32 } 33 } 34 } 35 public class ThreadDemo4 36 { 37 public static void main(String[] args ) 38 { 39 Ticket t=new Ticket();//声明一个Ticket类型的对象的“引用”,这个引用指向Ticket对象 40 Thread t1=new Thread(t);//创建一个线程,声明一个Thread类型的t1变量,t1变量又指向了t所指向的变量。 41 Thread t2=new Thread(t); 42 Thread t3=new Thread(t); 43 Thread t4=new Thread(t); 44 /*new Thread(t)中的t不是一个对象,而是一个声明为Ticket类型的变量,t指向这个对象的地址 45 * 而将t1~t4指向t,t又是指向run方法中的对象,即线程t1~t4指向ticket对象的地址 46 * 如果不指向对象,线程将不知道执行哪个run方法。 47 */ 48 //t1.run();犯错误了,注意不能是run方法,应该是start方法 49 t1.start(); 50 t2.start(); 51 t3.start(); 52 t4.start(); 53 54 55 56 } 57 }