1、要实现多线程,可以继承Thread类或实现Runnable接口,并且重写run方法,通过调用start方法启动线程,并自动调用run方法。
2、事实上run方法可以被重载,但线程执行时,默认只会调用无参数、无返回值的run方法。而重载的run方法只能显示调用。与其它的方法调用一样,是在调用它的线程中执行的
3、join方法:Waits for this thread to die. 即所等待的线程结束之后才会继续向下执行。
下面举例说明:
public class Starter extends Thread{
private int x = 2;
public Starter(){
x = 5;
start();
}
public void run(){
System.out.println(Thread.currentThread().getName());
x*=2;
System.out.println("x = "+x +" after run() method invoked!");
}
public void run(int y) throws Exception{
join();
System.out.println(Thread.currentThread().getName());
x-= y;
System.out.println(x);
}
public static void main(String[] args) throws Exception{
new Starter().run(1);
}
}
output:
Thread-0
x = 10 after run() method invoked!
main
9
如果不调用join方法
public void run(int y) throws Exception{
System.out.println(Thread.currentThread().getName());
x-= y;
System.out.println(x);
}
output:
main
4
Thread-0
x = 8 after run() method invoked!
这说明如果不调用join方法,主线程不会等待,而是直接执行,而jvm要创建线程需要一定时间,因此一般来说会比较慢。
另外需要强调的是,要启动线程,必须调用start方法,通过start方法调用run方法。如果直接调用run方法,并不会启动线程,而是相等于普通都方法调用,都是在主线程中执行。example:
public class Starter extends Thread{
private int x = 2;
public void run(){
System.out.println(Thread.currentThread().getName());
x*=2;
System.out.println("x = "+x +" after run() method invoked!");
}
public static void main(String[] args) throws Exception{
new Starter().run();
}
}
output:
main
x = 4 after run() method invoked!
分享到:
相关推荐
创建一个站台类Station,继承Thread,重写run方法,在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完! 2.创建主方法调用类 里面有源码,导入myeclipse执行
通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行...
通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行...
* 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println("Activity-->"+ Thread.currentThread().getId()...
JavaThread:Java线程
at java.lang.Thread.run(Unknown Source) Caused by: java.lang.NullPointerException at com.semaphore.jna.LibraryFinder.loadPath(LibraryFinder.java:64) at com.semaphore.jna.LibraryFinder.<clinit>...
java课上老师要求的小练习,使用的是继承Thread类来实现的。
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。...run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。而run() : run()就和普通的...下面通过示例代码给大家介绍了Java Thread中start()和run()的区别,感兴趣的朋友一起看看吧
Java Thread用法 经典Java Thread用法 经典
Java Thread Programming by:Paul Hyde java 线程编程(包含代码)
以下的问题是由于java的堆内存已满,需要java运行时加大java的堆内存空间 ... nested exception is java.lang.... at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.OutOfMemoryError: Java heap space
解决webrtc Thread::Clear崩溃的patch包,之前的老版本webrtc都会有Thread::Clear()多线程冲突的bug,根据这个补丁包,修改对应的源码,可以解决这个bug,亲测~~
jmeter针对websocket压测的时候,会出现错误,该错误为插件的bug [Problems] - Unexpected error: null java.util.LinkedList$ListItr.checkForComodification(LinkedList....java.lang.Thread.run(Thread.java:744)
本文以java中thread的start()和run()的区别做详细介绍, 需要了解跟多的朋友可以参考下
JavaThread
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) Causedby: java.lang.ClassNotFoundException: org.jdesktop.swingworker.SwingWorker at java.net.URLClassLoader$1.run(URLClassLoader....
Caused by: java.net.UnknownHostException: openapi.alipay.com
java thread dump 分析
java线程分析工具