只有是Thread或者是Thread的子类才是线程 对象。

问题2: 为什么要把Runnable实现类的对象作为实参传递给Thread对象呢?作用是什么?
作用就是把Runnable实现类的对象的run方法作为了线程的任务代码去执行了。
推荐使用: 第二种。 实现Runable接口的。
原因: 因为java单继承 ,多实现的。
Runnable如下实现:
public class Demo3 implements Runnable{
@Override
public void run() {
/*System.out.println("this:"+ this);
System.out.println("当前线程:"+ Thread.currentThread());*/
for(int i = 0 ; i < 100 ; i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public static void main(String[] args) {
//创建Runnable实现类的对象
Demo3 d = new Demo3();
//创建Thread类的对象, 把Runnable实现类对象作为实参传递。
Thread thread = new Thread(d,"狗娃"); //Thread类使用Target变量记录了d对象,
//调用thread对象的start方法开启线程。
thread.start();
for(int i = 0 ; i < 100 ; i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
/*
Thread类 的run方法
* @Override
public void run() {
if (target != null) {
target.run(); //就相当于Runnable实现类的对象的run方法作为了Thread对象的任务代码了。
}
}
*/
}
一个窗口售票的例子:
package cn.itcast.thread;
class SaleTicket implements Runnable{
int num = 50; // 票数
@Override
public void run() {
while(true){
synchronized ("锁") {
if(num>0){
System.out.println(Thread.currentThread().getName()+"售出了第"+ num+"号票");
num--;
}else{
System.out.println("售罄了..");
break;
}
}
}
}
}
public class Demo4 {
public static void main(String[] args) {
//创建了一个Runnable实现类的对象
SaleTicket saleTicket = new SaleTicket();
//创建三个线程对象模拟三个窗口
Thread thread1 = new Thread(saleTicket,"窗口1");
Thread thread2 = new Thread(saleTicket,"窗口2");
Thread thread3 = new Thread(saleTicket,"窗口3");
//开启线程售票
thread1.start();
thread2.start();
thread3.start();
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-70658-2.html
你10万放家里