黑马程序员技术交流社区
标题:
多线程 开启方式
[打印本页]
作者:
毛羚杨
时间:
2014-2-13 12:50
标题:
多线程 开启方式
在多线程中当我们创建了一个线程以后(继承Thread类,如下代码),我们可以直接通过调用Thread的start();方法启动线程,但是也可以直接调用run()方法 请问:调用run和调用start有什么区别
class Demo extends Thread
{
private String name;
Demo(String name)
{
super(name);
//this.name = name;
}
public void run()
{
for(int x=0; x<10; x++)
{
//for(int y=-9999999; y<999999999; y++){}
System.out.println(name+"....x="+x+".....name="+Thread.currentThread().getName());
}
}
}
class ThreadDemo2
{
public static void main(String[] args)
{
// Thread t1 = new Thread();
Demo d1 = new Demo("你好");
Demo d2 = new Demo("hello");
d1.start();//开启线程,调用run方法。
d2.start();
System.out.println("over...."+Thread.currentThread().getName());
}
}
作者:
kira
时间:
2014-2-13 13:14
本帖最后由 kira 于 2014-2-13 13:18 编辑
因为调用run是为了复写继承线程或者实现runnable中的run方法
而通过run方法调用的只是主线程并不是建立的一个新线程 默认名为Thread-数字
我把你的代码修改了下
public class TT {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Thread(new Dee("你好 s")).start();//调用strat
new Thread(new Dee("hello r")).run();//调用run
}
}
class Dee implements Runnable
{
private String name;
Dee(String name)
{
this.name=name;
}
public void run()
{
for(int x=0; x<10; x++)
{
System.out.println(name+"....x="+x+".....name="+Thread.currentThread().getName());
}
}
}
复制代码
证明这个方法并不能自己开辟线程 所以启动线程都用start而且这个方法在api里还不是定义在线程那块的
作者:
毛羚杨
时间:
2014-2-13 14:01
kira 发表于 2014-2-13 13:14
因为调用run是为了复写继承线程或者实现runnable中的run方法
而通过run方法调用的只是主线程并不是建立的一 ...
明白了 也就是说调用的run()方法不是多线程的方法而是普通的方法的调用 ,要想实现多线程就只有使用start()方法来开启线程
作者:
奋斗的小胖子
时间:
2014-2-13 14:25
run是开启线程而没有调用,而start是开启并且调用线程
作者:
菠萝鱼
时间:
2014-2-13 14:35
学习了 顶一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2