黑马程序员技术交流社区
标题:
如何线程启动
[打印本页]
作者:
韩伟
时间:
2012-7-13 12:37
标题:
如何线程启动
启动一个线程是用
run()
还是
start(), 这两个函数各有什么特别之处?
作者:
陆强强
时间:
2012-7-13 12:48
start():
run()只是普通的函数调用
作者:
黑马刘涛
时间:
2012-7-13 14:02
创建线程的第一种方式:继承Thread类。
步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
目的:将自定义代码存储在run方法。让线程运行。
3,调用线程的start方法,
该方法两个作用:启动线程,调用run方法。
创建线程的第二种方式:实现Runable接口
步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要将Runnable接口的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。
所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式有什么区别呢?
实现方式好处:避免了单继承的局限性。
在定义线程时,建立使用实现方式。
两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
作者:
杨康
时间:
2012-7-13 14:10
java实现多线程有2种方法:
1扩展java.lang.Thread类
2实现java.lang.Runnable接口
例如下面的例子
class ThreadDemo implements Runnable { //实现Runnable接口
public void run() { // 实现run方法
for (int i = 0; i < 10; i++) {
System.out.println("td线程:AAAAAAAAAAAAA");
try {
Thread.sleep(2000); //休眠2秒
} catch (Exception e) {}
}
}
public static void main(String[] args) {
ThreadDemo td = new ThreadDemo();
Thread t1 = new Thread(td);
t1.start(); //开启线程用start()方法,执行run()方法的内容
for (int i = 0; i < 5; i++) { //主线程
System.out.println("main线程:aaaaaaaaaa");
try {
Thread.sleep(2000); //休眠2秒
} catch (Exception e) {}
}
}
}
作者:
王飞
时间:
2012-7-13 14:17
帅哥,你还是多看看视频吧,
start(); 这个方法是开启线程的方法,一调用它,它就去执行run()方法里面的代码 ,调用一次start();那么就多一个线程。
run(); 这个是每个线程启动后运行的方法,出现在Thread类的子类中和实现Runnable接口的类中
作者:
李思静
时间:
2012-7-13 15:01
run()就是普通的函数调用,执行完run()才能继续执行下面的代码的,而start()不是这样的,start()是开启一个新的线程,是跟主函数的并列关系。老毕曾经说过,画图才是这个世C:\Users\Lee\Desktop\s.png界上最好的学习方法。
s.png
(100.3 KB, 下载次数: 28)
下载附件
这个就是两个函数运行时的图
2012-7-13 15:00 上传
作者:
耿立刚
时间:
2012-7-13 15:16
1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码
通过调用Thread类的start()方法来启动一个线程,
这时此线程是处于就绪状态,
并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的,
这里方法run()称为线程体,
它包含了要执行的这个线程的内容,
Run方法运行结束,
此线程终止,
而CPU再运行其它线程
2.run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码
而如果直接用Run方法,
这只是调用一个方法而已,
程序中依然只有主线程--这一个线程,
其程序执行路径还是只有一条,
这样就没有达到写线程的目的。
举例说明一下:
记住:线程就是为了更好地利用CPU,
提高程序运行速率的!
public class TestThread1{
public static void main(String[] args){
Runner1 r=new Runner1();
//r.run();//这是方法调用,而不是开启一个线程
Thread t=new Thread(r);//调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。
t.start();
for(int i=0;i<100;i++){
System.out.println("进入Main Thread运行状态");
System.out.println(i);
}
}
}
class Runner1 implements Runnable{ //实现了这个接口,jdk就知道这个类是一个线程
public void run(){
for(int i=0;i<100;i++){
System.out.println("进入Runner1运行状态");
System.out.println(i);
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2