join是Thread类中定义的非静态,final方法,它是一个重载的方法,join()表示等待调用的线程。它让一个线程“加入到”另一个线程的尾部。如果线程B在线程A完成工作之前不能进行它的工作。则可以让线程B加入到线程A。它意味着线程B不会变成可运行的。不带参数的join()方法,一直等待线程A终止。那么我的理解是 b.join(a);应该有参数的,但实际上没有这样的使用。请看这个例子:
public class JoinTest {
public static void main(String[] args) {
ThreadCounter a = new ThreadCounter();
ThreadCounter b = new ThreadCounter();
b.start();
a.start();
try {
b.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
class ThreadCounter extends Thread{
public void run(){
int i =0;
for(;;){
System.out.println(Thread.currentThread() + "" + i++);
if(i>100000)break;
}
}
}那么(1)没有使用b.join(a)的方法。
(2)输出结果应该是
Thread[Thread-1,5,main]99997
Thread[Thread-1,5,main]99998
Thread[Thread-1,5,main]99999
Thread[Thread-1,5,main]100000在最后,因为必须待a(Thread-0)运行结束才行吧。
public class JoinTest {
public static void main(String[] args) {
ThreadCounter a = new ThreadCounter();
ThreadCounter b = new ThreadCounter();
b.start();
a.start();
try {
b.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
class ThreadCounter extends Thread{
public void run(){
int i =0;
for(;;){
System.out.println(Thread.currentThread() + "" + i++);
if(i>100000)break;
}
}
}那么(1)没有使用b.join(a)的方法。
(2)输出结果应该是
Thread[Thread-1,5,main]99997
Thread[Thread-1,5,main]99998
Thread[Thread-1,5,main]99999
Thread[Thread-1,5,main]100000在最后,因为必须待a(Thread-0)运行结束才行吧。
new Thread(b).start();你那样是串行。
直到某种情况另一个人才会走。
线程二算六到十的和。这是就需要join,当一到五和算时,启动第二个线程,二.join().
以为是 数据库里面的了