黑马程序员技术交流社区
标题:
线程问题
[打印本页]
作者:
张海洋
时间:
2013-3-22 23:28
标题:
线程问题
本帖最后由 张海洋 于 2013-3-23 19:29 编辑
启动一个线程是用run()还是start()?
作者:
陈腾跃_2013
时间:
2013-3-22 23:30
本帖最后由 陈腾跃_2013 于 2013-3-22 23:34 编辑
按你的意思,是start()!
run()是一个方法,可以在子类中覆盖,在线程启动的时候会调用。
eg:
class Demo extends Thread
{
//覆盖成自定义方法
public void run()
{
System.out.println("Demo run");
}
}
class ThreadDemo
{
public static void main(String[] args)
{
Demo d = new Demo();
d.start();//启动线程调用run方法
}
}
作者:
彭颖
时间:
2013-3-22 23:35
创建线程一:继承Thread类
步骤:定义类继承Thread。
复写Thread类中的run方法。
目的:将自定义的代码存储在run方法,让线程运行。
调用线程的start方法。
(该方法两个作用:启动线程,调用run方法)
Thread类用于描述线程,该类就定义了一个功能,用于存储线程要运行的代码。就是run方法。
也就是说Thread类中的run方法,用于存储线程要运行的代码。
作者:
lxww
时间:
2013-3-22 23:40
class ThreadDemo1 {
public static void main(String[] args) {
MyThread mt = new MyThread(); // 4.创建线程对象
mt.start(); // 5.开启新线程, 内部会自动执行run方法
for (int i = 0; i < 1000; i++)
System.out.println("A");
}
}
class MyThread extends Thread { // 1.定义类继承Thread
public void run() { // 2.重写run方法
for (int i = 0; i < 1000; i++) // 3.把新线程要做的事写在run方法中
System.out.println("B");
}
}
作者:
芦子骐
时间:
2013-3-23 01:43
呵呵 这个错误我在刚看完线程的时候就犯过 所有比较深刻 一定要用start 如果用run的话 你只是调用的那个类的run方法 并没有启动线程 那么结果就是:run方法中的代码
只执行一次 或者是循环的话就会执行完再接着从主线程继续往下走
作者:
李辉
时间:
2013-3-23 07:15
start()
作者:
Dev_Lzf
时间:
2013-3-23 19:17
启动线程使用start()方法,不能是run()方法。
因为: 调用start()方法启动线程,系统会把该run()方法当成线程执行体来处理;但如果直接调用线程对象的run()方法,则run()方法立即就被执行,而且在run()方法放回之前其他线程无法并发执行,也就是说,系统会把线程对象当成一个普通对象,而run()方法也即是一个普通的方法,而不是线程执行体;例如:
{
//下面两行代码并不会启动两个线程,而是依次执行两个run()方法
//(thread1是一个继承Thread的线程对象)
new thread1().run();
new thread1().run();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2