黑马程序员技术交流社区
标题:
两种线程的区别
[打印本页]
作者:
侯伟浩
时间:
2011-11-25 09:18
标题:
两种线程的区别
本帖最后由 hou3172568 于 2011-11-25 17:13 编辑
看了张老师的关于定时器的应用,产生了一个疑问。
public class My extends Thread {
public static void main(String args[]) throws Exception
{
Thread t1=new My();
t1.start();
}
public void run()
{
while(true)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("hello");
}
}
}
复制代码
这个是每隔一秒输出一句hello。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class My2 {
public static void main(String args[]) throws Exception
{
ScheduledExecutorService se=Executors.newScheduledThreadPool(1);
se.scheduleAtFixedRate(
new Runnable(){
public void run() {
System.out.println("hello");
}},
1,
1,
TimeUnit.SECONDS);
}
}
复制代码
这个也是每隔一秒输出一句hello。
都是线程,完成同样的功能,有什么区别呢?
作者:
梦女孩
时间:
2011-11-25 10:21
第一个只是定义了一个线程,如果起两个或者两个以上的线程,那么它们会并发执行。
第二个定义的是线程池,它可以控制并发执行的线程数,如果达到最大值,那么之后的线程就要处于等待状态,等之前的线程执行完成之后释放池空间,才可进入执行。
ScheduledExecutorService se=Executors.newScheduledThreadPool(1);
你定义的线程池容量为1,也就是说,如果有两个线程同时执行,它们不会并发执行,只能第一个先进去,等执行完毕,释放线程池空间才能让第二个进入。
作者:
祁焱
时间:
2011-11-25 11:53
创建线程的两种方式:
(1), 继承Thread类
1.子类覆盖父类中的run方法,将线程运行的代码存放在run中。
2.建立子类对象的同时线程也被创建。
3.通过调用start()方法开启线程。
(2),实现Runnable接口
1.子类覆盖接口中的run方法。
2.通过Thread类创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread类的构造函数。
3.Thread类对象调用start方法开启线程
在功能实现上没什么区别,只是因为java是单继承的,所以不可能让所有的类都继承Thread类,所以必须有这个Runnable 接口。
一般来说编程都会去 实现Runnble 接口,而不会采用继承Thread。
作者:
侯伟浩
时间:
2011-11-25 12:44
楼上,感谢你回答我的问题,可是你所答非所问啊。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2