class NewThread implements Runnable {
Thread t;
public NewThread() {
t = new Thread(this,"Demo thread");
System.out.println("Child thread : " + t);
t.run();
}
public void run(){
try{
for( int i = 5; i > 0; i --){
System.out.println("Child thread :" + i);
Thread.sleep(500);
}
}catch(InterruptedException e){
System.out.println("Child interrupted.");
}
System.out.println("Exiting child thread.");
}
}
public class TestDemo{
public static void main(String args[]){
new NewThread();
try{
for( int i = 5; i > 0; i --){
System.out.println("Main thread :" + i);
Thread.sleep(1000);
}
}catch(InterruptedException e){
System.out.println("Main interrupted.");
}
System.out.println("Exiting Main thread.");
}
}
这是一个实现多线程的程序,运行结果如下:
Child thread : Thread[Demo thread,5,main]
Main thread :5
Child thread :5
Child thread :4
Main thread :4
Child thread :3
Child thread :2
Main thread :3
Child thread :1
Exiting child thread.
Main thread :2
Main thread :1
Exiting Main thread.
试想,如果把 start()改成run()会出现什么结果?
修改之后运行结果:
Child thread : Thread[Demo thread,5,main]
Child thread :5
Child thread :4
Child thread :3
Child thread :2
Child thread :1
Exiting child thread.
Main thread :5
Main thread :4
Main thread :3
Main thread :2
Main thread :1
Exiting Main thread.
程序运行成为了单线程顺序执行。为什么?
start方法:用来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容, run方法运行结束, 此线程终止, 而CPU再运行其它线程,
直接用run方法: 这只是调用一个方法而已, 程序中依然只有主线程--这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。
记住:线程就是为了更好地利用CPU,提高程序运行速率的!
让一个类继承Thread,重写run()方法,然后调用时使用:new ThreadImp().start()方法
来启动该类的实例!不要用new ThreadImp().run() !!!
分享到:
相关推荐
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦...
主要介绍了java中thread线程start和run的区别,run()是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的
主要介绍了java线程中start和run的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了JAVA面试题 启动线程是start()还是run()?为什么?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。...run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。而run() : run()就和普通的...下面通过示例代码给大家介绍了Java Thread中start()和run()的区别,感兴趣的朋友一起看看吧
线程中start方法和run方法的区别
这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void。
主要介绍了java 线程中start方法与run方法的区别详细介绍的相关资料,在java线程中调用start方法与run方法的区别在哪里? 这两个问题是两个非常流行的初学者级别的多线程面试问题,这里进行详细说明,需要的朋友可以...
本文以java中thread的start()和run()的区别做详细介绍, 需要了解跟多的朋友可以参考下
Java是一种功能强大、可靠性高、跨平台的编程语言,适用于各种应用场景。它被广泛用于企业级应用开发、移动应用开发、云计算、大数据处理等领域,是一门值得学习和掌握的编程语言。
主要介绍了Java线程中start和run方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
start()方法它的作用是启动一个新线程,run()就和普通的成员方法一样,可以被重复调用。接下来通过本文给大家分享Java中启动线程start和run的两种方法,需要的朋友参考下吧
主要介绍了Thread中start()和run()的区别,Thread类包含start()和run()方法,它们的区别是什么?下面将对此作出解答
5. Thread 类中的 start () 和 run () 方法有什么区别? 6. Java 中 Runnable 和 Callable 有什么不同? 7. Java 中 CyclicBarrier 和 CountDownLatch 有什么不同? 8. Java 内存模型是什么? 9. Java 中的 volatile...
* 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println("Activity-->"+ Thread.currentThread().getId()...
Thread类的start()和run()方法的区别 start()方法会创建新的线程并启动该线程,所以该方法会调用其他native方法,而run()方法就是: 正常的Java方法调用,即在原来的线程中执行java代码。 Java中Runnable和...
面试过程中经常会被面试官问到为什么我们调用start()方法时会执行run()方法,为什么不能直接调用run()方法,问的一头雾水,今天小编给大家介绍下Java线程的start方法回调run方法的操作技巧,需要的朋友参考下吧
9 Thread类中最重要的方法是 start 和 run 10 OutputStream类的功能是 接受要输出的字节并将它送往目的地 InputStream类的功能是 输入字节流 11 针对网络通信的不同层次 Java提供的网络功能有四大类:...
企业常见java面试题,java基础,java进阶 JDK 和 JRE 有什么区别? == 和 equals 的区别是...线程的 run()和 start()有什么区别? 创建线程池有哪几种方式? 在 java 程序中怎么保证多线程的运行安全? 什么是死锁?