黑马程序员技术交流社区
标题:
多线程继承Thread类和实现Runnable接口
[打印本页]
作者:
吴通
时间:
2012-9-5 18:19
标题:
多线程继承Thread类和实现Runnable接口
第一种:
class Ticket
extends Thread
{
private int tick=100;
public void run()
{
while(true)
{
if(tick>0)
{
System.out.println("执行");
System.out.println(Thread.currentThread().getName()+"::"+tick--);
}
}
}
}
class TicketDemo3
{
public static void main(String[] args)
{
Ticket t1=new Ticket();
Ticket t2=new Ticket();
Ticket t3=new Ticket();
Ticket t4=new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
第二种:
class Ticket
extends Thread
{
private int tick=100;
public void run()
{
while(true)
{
if(tick>0)
{
System.out.println("执行");
System.out.println(Thread.currentThread().getName()+"::"+tick--);
}
}
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
第三种:
class Ticket implements Runnable
{
private int tick=1000;
Object obj=new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(tick>0)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
System.out.println("执行");
}
System.out.println(Thread.currentThread().getName()+tick--);
}
}
}
}
}
class TicketDemo2
{
public static void main(String[] args)
{
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
创建多线程有两种方法:继承Thread类和实现Runnable接口
继承的步骤:
1.继承Thread类
2.复写Thread中的方法
3.调用新城的start方法
实现的步骤:
1.定义类,实现Runnable接口
2.覆盖Runnable接口中的run方法
3.通过Thread类建立线程对象
4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数
5.调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
上面的第一种是继承Thread类,第三种是实现Runnable接口的方法,
但是第二种方法是属于什么?红色部分是属于实现的代码怎么也能用?
请详解一下它们的区别?谢谢
作者:
杨震
时间:
2012-9-5 19:18
第二种方法你是利用继承Thread,Thread实际上也实现了Runnable,这样的话你的Ticket也就是一个Runnable,就可以传入Thread构造函数里
作者:
于启会
时间:
2012-9-5 19:38
第一种方法和第二种方法都继承了Thread方法。
因为JDK API中Thread类已经声明了public class Threadextends Objectimplements Runnable,
实现了Runnable这个接口,所以第二种方法中的红色代码也能够使用。
第一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。
第三种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。
第二种方法使用红色代码部分也能够执行,但是却把Ticket t=new Ticket();Thread t1=new Thread(t);
看作成了实现了Runnable接口的类。
作者:
庄星睿
时间:
2012-9-5 20:57
第一种继承Thread类相当于,我要生产一个产品,首先我要建一个那个符合标准的工厂来生产产品,第三种实现Runnable接口的,相当于我要生产一个产品我就要建一个那样的工厂太麻烦了,我可以准备符合标准的(Runnable接口)的原材料,我找相应的代工厂(Thread)去帮我生产,至于第二种相当于,你先让那个工厂生产出来半成品,再把半成品继续交给这个工厂帮你生产,多余了。所以只有两种,继承Thread类,实现runnable,区别就相当于一个人只能有一个亲爹,但可以认很多干爹是一个道理的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2