-
- 持续Thread类
Java中start和run办法的差别
添加时间:2013-7-22 点击量:一.题目引入
说到这两个办法就不得不说多线程,说到多线程就不得不提实现多线程的两种体式格式持续Thread类和实现Runable接口,下面先看这两种体式格式的差别。
二. Java中实现多线程的两种体式格式
/
应用Thread类模仿4个售票窗口共同卖100张的法度,实际上是各卖100张
/
public class ThreadTest {
public static void main(String[] args){
new MyThread().start();
new MyThread().start();
new MyThread().start();
new MyThread().start();
}
//也可以把类写在外边
public static class MyThread extends Thread{
private int tickets=100;
public void run() {
while(tickets>0){
System.out.println(this.getName()+卖出第【+tickets--+】张);
}
}
}
}/
应用Thread类模仿4个售票窗口共同卖100张的法度,实际上是各卖100张
/
public class ThreadTest {
public static void main(String[] args){
new MyThread().start();
new MyThread().start();
new MyThread().start();
new MyThread().start();
}
}
class MyThread extends Thread{
private int tickets=100;
public void run() {
while(tickets>0){
System.out.println(this.getName()+卖出第【+tickets--+】张);
}
}
}2. 实现Runable接口
/
应用Runnable接口模仿4个售票窗口共同卖100张的法度
/
public class RunnableTest {
public static void main(String[] args) {
Runnable runnable=new MyThread();
new Thread(runnable).start();
new Thread(runnable).start();
new Thread(runnable).start();
new Thread(runnable).start();
}
public static class MyThread implements Runnable{
private int tickets=100;
public void run() {
while(tickets>0){
System.out.println(Thread.currentThread().getName()+卖出第【+tickets--+】张);
}
}
}
}不管采取哪种体式格式,覆盖run办法时既可以用内部类也可以用外部类,不过一般采取内部类。
3. 两种体式格式的斗劲
实际中往往采取实现Runable接口,一方面因为java只支撑单持续,持续了Thread类就无法再持续持续其它类,并且Runable接口只有一个run办法;另一方面经由过程成果可以看出实现Runable接辩才是真正的多线程……
三.两种办法的差别
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.。