黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
夏儒日
时间:
2012-7-20 12:35
标题:
多线程问题
创建一个线程,要么就继承Thread覆盖run()方法,要么定义类实现Runnable接口、覆盖Runnable接口中的run方法将线程要运行的代码存放在run方法中。多线程类又是先运行start方法,start方法实际上是调用run方法.我不明白的地方是run()方法能否被多次调用呢?
作者:
京鱼龙
时间:
2012-7-20 13:42
本帖最后由 罗京雨 于 2012-7-20 13:56 编辑
我的理解是run()能多次调用。假如你new了两个对象,d1.start();d2.start()。start方法做了两件事:1,开启了线程让线程可以运行,2,调用了run方法。两个对象都运行,调用完一个run(),然后run()就出栈了,接着第二个对象在调用在出栈。
调用run方法和调用start方法的区别:
调用run方法,仅仅是一般对象在调用对象中的方法,并没有开启线程,
还有主线程来完成的run方法的运行。
调用start方法,是开启了一个线程(一个新的执行路径。)
这个线程去执行了run方法。
作者:
包晗
时间:
2012-7-20 13:43
本帖最后由 包晗 于 2012-7-20 14:44 编辑
run 方法是可以多次使用的
run方法是线程运行的主方法,存储要单独完成的代码
查阅无数帖子后发现 多次启动一个线程是非法的
当线程已经结束执行后,不能再重新启动RUN
(相同线程不能多次使用,即start)
查阅API
使用实现接口 Runnable 的对象创建一个线程时,
启动该线程将导致在独立执行的线程中调用对象的run 方法。
使用实现接口 Runnable 的对象创建一个线程时,
启动该线程将导致在独立执行的线程中调用对象的 run 方法。
class Demo extends Thread
{
public void run()
{
for(int x=0;x<10;x++)
System.out.println("Demo ..........RUN"+x);
}
}
class ThreadDemo
{
public static void main(String[] args)
{
Demo d =new Demo();
d.start();//d.run();
d.start(); // d.run(); run 可以多次使用 start 不行
for (int x=0;x<10 ;x++ )
{
System.out.println("THread run 方法"+x);
}
}
}
复制代码
连续使用2个 相同的start 系统会报错 如上面代码中的 d.start
但是 使用 2个 d.run(); 程序会运行下去
作者:
芦曦
时间:
2012-7-20 14:05
class Ticket implements Runnable
{
public void run()
{
}
}
class TiktDemo
{
public static void main(String[] args)
{
Thread t1 = new Thread(t);//
创建一个线程
Thread t2 = new Thread(t);//
创建一个线程
t1.start();//
开启t1线程,调用run方法
t2.start();//
开启t2线程,调用run方法
}
}
run方法能被多次调用。只要开启了线程,该线程就会调用run方法。
作者:
王宝康
时间:
2012-7-20 14:14
我刚才查了下,你可以看看这里讲解的,http://www.cnblogs.com/linjiqin/archive/2011/04/10/2011272.html
作者:
王超
时间:
2012-7-20 14:32
这个run方法是我们调用start之后自定义线程开始执行的入口。
当线程开始执行了。它就只能进入一次run方法,将里面的语句都执行完毕。结束这个run方法,线程也就随之结束。
一个线程在从建立到消亡,它只调用了一次自己的入口run方法。不能被多次调用。
就好比main方法。一个程序只能有这么一个入口,main方法结束,主线程就结束了。这是一个线程的消亡。
run()方法的作用其实就充当了你自定义线程的入口。相当于主线程的main入口,没有这个入口线程就不能启动。
作者:
王龙彪
时间:
2012-7-20 14:40
一个start方法调用一个run方法
作者:
张水荣
时间:
2012-7-20 17:05
如果是同一个线程,不可重复启动,否则会报 “ java.lang.IllegalThreadStateException ”异常。如果使用同一个线程类,new出多个线程来,则可以,因为new出来的是不同的线程。
作者:
张水荣
时间:
2012-7-20 17:07
芦曦 发表于 2012-7-20 14:05
class Ticket implements Runnable
{
public void run()
如果调用再次t1.start(),run方法也被多次调用了,但此时会报“ java.lang.IllegalThreadStateException ” 异常
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2