当前位置: 技术问答>java相关
一个线程的概念问题.....
来源: 互联网 发布时间:2015-05-03
本文导语: 谁能给我讲讲join()的用法? | 当然具体的参照文档资料,这只是我自己的一点看法 | join public final void join(longmillis, intnanos) ...
谁能给我讲讲join()的用法?
|
当然具体的参照文档资料,这只是我自己的一点看法
|
join public final void join(long millis,
int nanos)
throws InterruptedException Waits at most millis
milliseconds plus nanos nanoseconds for this thread to die.Parameters:millis - the time to wait in milliseconds.nanos - 0-999999 additional nanoseconds to wait.Throws:IllegalArgumentException - if the value of millis is negative the value of nanos is not in the range 0-999999.InterruptedException - if another thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown
int nanos)
throws InterruptedException Waits at most millis
milliseconds plus nanos nanoseconds for this thread to die.Parameters:millis - the time to wait in milliseconds.nanos - 0-999999 additional nanoseconds to wait.Throws:IllegalArgumentException - if the value of millis is negative the value of nanos is not in the range 0-999999.InterruptedException - if another thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown
|
package test;
import java.io.*;
public class MethodTest {
static PrintWriter out = new PrintWriter(System.out,true);
public static void main(String[] args) {
FirstThread first = new FirstThread();
SecondThread second = new SecondThread();
first.start();
second.start();
//本来程序中只有主线程,现在多了两个线程
try{
out.println("Waiting for first thread to finish...");
first.join();
//join的意思就是说先让主线程等待,运行first线程,等first的run方法结束后
//再接着运行主线程
out.println("It's a long wait!");
out.println("Wakong up second thread...");
synchronized(second){
second.notify();
}
out.println("Waiting for second thread to finish...");
second.join();
//与上面的一样,让主线程等待,运行second的run方法
}catch(InterruptedException e){
}
out.println("I'm ready to finish too.");
}
}
class FirstThread extends Thread{
public void run(){
try{
MethodTest.out.println(" First thread starts running.");
sleep(10000);
MethodTest.out.println(" First thread finishes running.");
}catch(InterruptedException e){
}
}
}
class SecondThread extends Thread{
public synchronized void run(){
try{
MethodTest.out.println(" Second thread starts running.");
MethodTest.out.println(" Second thread suspends itself.");
wait();
MethodTest.out.println(" Second thread runs again and finishes.");
}catch(InterruptedException e){
}
}
}
你可以先运行一下试试,然后再去掉两处join,比较结果
import java.io.*;
public class MethodTest {
static PrintWriter out = new PrintWriter(System.out,true);
public static void main(String[] args) {
FirstThread first = new FirstThread();
SecondThread second = new SecondThread();
first.start();
second.start();
//本来程序中只有主线程,现在多了两个线程
try{
out.println("Waiting for first thread to finish...");
first.join();
//join的意思就是说先让主线程等待,运行first线程,等first的run方法结束后
//再接着运行主线程
out.println("It's a long wait!");
out.println("Wakong up second thread...");
synchronized(second){
second.notify();
}
out.println("Waiting for second thread to finish...");
second.join();
//与上面的一样,让主线程等待,运行second的run方法
}catch(InterruptedException e){
}
out.println("I'm ready to finish too.");
}
}
class FirstThread extends Thread{
public void run(){
try{
MethodTest.out.println(" First thread starts running.");
sleep(10000);
MethodTest.out.println(" First thread finishes running.");
}catch(InterruptedException e){
}
}
}
class SecondThread extends Thread{
public synchronized void run(){
try{
MethodTest.out.println(" Second thread starts running.");
MethodTest.out.println(" Second thread suspends itself.");
wait();
MethodTest.out.println(" Second thread runs again and finishes.");
}catch(InterruptedException e){
}
}
}
你可以先运行一下试试,然后再去掉两处join,比较结果