线程都有自己默认的名称
Thread-编号
getName()方法获取线程名称
setName(String name)方法设置线程名称,或者调用Thread的构造函数
Thread.currentThread()获取当前的线程
1 class Test extends Thread 2 { 3 //private String name; 4 Test(String name) 5 { 6 //this.name = name; 7 super(name); 8 } 9 public void run() 10 { 11 for(int x = 0; x<60 ;x++) 12 System.out.println(Thread.currentThread().getName()+" run..."+x); 13 } 14 } 15 16 class ThreadDemo 17 { 18 public static void main(String[] args) 19 { 20 Test t1 = new Test("one"); 21 Test t2 = new Test("two"); 22 t1.start(); 23 t2.start(); 24 25 for(int x = 0; x<60 ;x++) 26 System.out.println("Hello world"+x); 27 } 28 }
创建线程的第二种方式:实现Runnable接口
步骤:
1 定义类实现Runnable接口
2 覆盖Runnable接口中的run方法
将线程要运行的代码存放在该run方法中
3 通过Thread类建立线程对象
4 将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数
为什么要将Runnable接口的子类对象传递给Thread的构造函数
因为,自定义的run方法所属的对象是Runnable接口的子类对象
所以要让线程去执行指定对象的run方法,就必须明确该run方法所属的对象
5 调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
实现方式和继承方式有什么区别呢?
实现方式好处:避免了单继承的局限性
在定义线程时,建议使用实现方式
区别
继承Thread:线程代码存放在Thread子类run方法中
实现Runnable:线程代码存放在接口的子类的run方法中
1 class Ticket implements Runnable//extends Thread 2 { 3 private int tick = 100; 4 public void run() 5 { 6 while(true) 7 { 8 if(tick>0) 9 System.out.println(Thread.currentThread().getName()+"sales : "+tick--); 10 } 11 } 12 } 13 class Demo 14 { 15 16 public static void main(String[] args) 17 { 18 Ticket t = new Ticket(); 19 Thread t1 = new Thread(t); 20 Thread t2 = new Thread(t); 21 Thread t3 = new Thread(t); 22 Thread t4 = new Thread(t); 23 t1.start(); 24 t2.start(); 25 t3.start(); 26 t4.start(); 27 /* 28 Ticket t1 = new Ticket(); 29 Ticket t2 = new Ticket(); 30 Ticket t3 = new Ticket(); 31 t1.start(); 32 t2.start(); 33 t3.start(); 34 */ 35 //System.out.println(""); 36 } 37 }
Happy coder
浙公网安备 33010602011771号