实现Runnable完成线程,这样的好处是灵活,因为可以继承其他类
同时也要重写run()方法来描述线程的任务信息,由新的类的 对象来构建Thread类的对象,调用strat方法来开启线程(这种方式常用)
线程竞争关系图:
public static void main(String[] args) {
RDemo r=new RDemo("111");
//由于没有继承Threa类,所以没有start()方法来启动线程
//所以需要创建线程对象,完成线程启动
//由于Thread类和我们自己创建的RDemo都实现了Runnable,所以他们是同类关系
//所以是同类对象给本类对象提供了新的功能-----这是装饰者设计模式
Thread t1=new Thread(r);
//开启线程
t1.start();
//开启主线程
for (int i = 0; i < 20; i++) {
System.out.println("这是主线程:"+i);
//休眠只是为了看效果
try {
//休眠有可能会不能重启,所以异常处理
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//实现Runnable完成线程,这样的好处是灵活,并且可以继承其他类
class RDemo implements Runnable{
//定义一个线程名字,用来区分线程
private String name;
public RDemo(String name){
this.name=name;
}
//需要重写run()方法,来描述线程的内容(线程需要执行的功能)
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(name+":i="+i);
//还是使用休眠,看效果,实际上不用休眠,这里是为了效果明显
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果:
上一篇文章使用了继承Thread类,实现线程:
JAVA版,线程初级入门案例一:继承Thread类创建线程
下一篇:线程不安全的抢票程序(ps.我把输出改成了抢糖果)
JAVA版本,线程三:线程实现卖票程序