java实现多线程的方式以及run方法和start方法的区别
来源:互联网 发布:免费局域网控制软件 编辑:程序博客网 时间:2024/05/16 09:59
1.java实现多线程的两种方式
1)java类继承Thread类
继承Thread类是实现java多线程的一种方式,但是实际上Thread类本身实现了Runnable接口,它代表了线程的一个实例。
启动线程唯一的方法就是调用Thread类的start()方法,这时候便开启了一个新的线程。然后线程会自动调用run方法,你可以重写run方法,在里面添上自己想要执行的代码。
以下附上代码:
public Mythread extends Thread{
@override
public void run(){
System.out.println("这里面可以写上自己要实现的代码");
}
}
然后在合适的位置启动线程
MyThread myThread = new Mythread();
myThread.start();//run方法会自动执行
2)java类实现Runnable接口
有时候我们经常选择实现Runnable接口来实现多线程,原因是java只支持单继承,如果你的类已经继承了一个其他类,这时候你就要通过实现Runnable接口来实现多线程。
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("写入自己要执行的代码");
}
}
为了启动线程,你需要实例化一个Thread对象,并将实现了Runnable接口的实例对象(MyThread)传入Thread的构造函数中,再调用start方法开启一个线程。
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
这时候thread类中的run方法就会自动调用你的run方法(也就是你的run方法会自动执行)。
2.多线程中run方法和start方法的区别
1) start:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法
run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.。
两种方式的比较 :实际中往往采用实现Runable接口,一方面因为java只支持单继承,继承了Thread类就无法再继续继承其它类,而且Runable接口只有一个run方法;另一方面通过结果可以看出实现Runable接口才是真正的多线程……
- java实现多线程的方式以及run方法和start方法的区别
- java 多线程 start()和run()方法的区别
- Java多线程中run和start方法的区别
- 多线程 -- run()方法和start()方法的区别
- java多线程 run() 与start()方法的区别
- 多线程中start和run方法的区别
- 多线程中 run() 和 start() 方法 的区别
- 多线程中run()和start()方法的区别
- run方法和start方法的区别
- Thread.java start方法和run方法的区别
- java Thread中,run方法和start方法的区别
- 关于多线程的start()和run()方法
- Java多线程run和start的区别
- Java多线程start()和run()的区别
- Java 入门 之 多线程的 start 和 run 方法
- Thread的run和start方法区别
- Thread run()和start()方法的区别
- Java线程中run和start方法的区别
- 前景目标检测——帧差法
- Android常见的十个高级控件
- 关于flash player更新过程中出现连接错误
- 例题9-14 UVA 1218 Perfect Service 完美的服务(树形dp)
- 快速学习EndNote X7
- java实现多线程的方式以及run方法和start方法的区别
- cf 697 D
- SpringMVC如何接受 js jquery ajax 的数组参数传值
- 百度云推送-----10101错误
- Bootstrap小笔记 排版/辅助类/表单/导航
- java分页后台的Page
- JMeter压力测试
- 8-分数序列
- sql创建表的时候设置主键、标识、字段字段额外属性(如说明)以及默认值