java 从零开始,学习笔记之基础入门<线程及实例分析>(十九)(二)

2014-11-24 08:29:18 · 作者: · 浏览: 8
类的对象名)
//thread类对象名.start();
}
结束线程:怎么判断一个线程结束了
1. 线程中线程体的操作执行完成,在执行过程中不出任何异常则执行完成
2. 线程执行过程中线程结束或者线程出现错误则线程停止
package com.ibm.runnable;
public class OutThread implements Runnable{
@Override
public void run() {
for(int i =1;i<=50;i++){
System.out.println(i);
//当i输出到20的时候,我让程序退出
if(i==20){
//当i=20时程序退出,线程结束
System.exit(0);
}
}
}
public static void main(String[] args) {
OutThread ot = new OutThread();
Thread tt = new Thread(ot);
tt.start();
}
}
当i=20时,让程序退出,那么开启的输出1到20的线程就退出了,不会输出20之后的i的值
后台线程:
如果我们同时启动多个线程,那么可以让其中的某一个线程或者多个线程设置为后台线程,那么主线程结束,后台线程也跟着结束,后台线程依附于主线程运行
package com.ibm.daemon;
public class DaeThread01 extends Thread{
public void run(){
//输出1到10000
for(int i=1;i<=1000;i++){
try {
this.sleep(10);//让线程 睡眠10毫秒
//每循环一次让线程延迟10毫秒输出
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName()+i);
}
}
}
package com.ibm.daemon;
public class DaeThread02 {
public static void main(String[] args) {
Thread tt = new DaeThread01();
//将tt线程设置为后台线程默认守护线程为false
//设置守护线程必须在线程启动之前
tt.setDaemon(true);
tt.start();
//主线程结束,守护线程跟着主线程一起结束
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName());
}
}
}
线程的join方法
当一个线程正在执行的时候,那么在 某个条件下,可以让另一个线程B加入进来执行,但是线程A就需要停止,然后执行线程B,当线程B执行完之后,在接着执行A里面的内容
package com.ibm.join;
public class JoinDemo01 extends Thread{
public void run(){
String[] str = {"a","b","c"};
for(int i=0;i
System.out.println(this.getName()+":"+str[i]);
}
}
}
package com.ibm.join;
public class JoinTest {
public static void main(String[] args)throws InterruptedException {
Thread tt = new JoinDemo01();
for(int i=0;i<100;i++){
Thread.sleep(1000);
if(i==10){
//加入线程
tt.join();
tt.start();
}
System.out.println(i);
}
}
}
线程的isAlive方法:
package com.ibm.control;
public class IsAliveDemo extends Thread{
public void run(){
for(int i=0;i<10;i++){
if(i==5){
System.out.println(this.getName()+"状态:"+this.isAlive());
}
if(i==10){
System.out.println(this.getName()+"状态:"+this.isAlive());
}
}
}
public static void main(String[] args) {
Thread tt=new IsAliveDemo();
System.out.println("线程启动前:"+tt.isAlive());
tt.start();
System.out.println("线程启动后:"+tt.isAlive());
}
//isAlive方法是用来判断一个线程是否是处于运行状态,在线程启动之前,或者线程
//执行完成后,那么线程都处于结束状态,那么isAlive方法返回false,如果线程启动
//后并且在线程的执行过程中线程的isAlive都是处于可运行状态,方法返回true
}
线程让步(Yield方法)
package com.ibm.control;
public class YieldDemo extends Thread {
//Yield方法属于线程让步,我们在创建二个或者多个线程的时候,如果没有给线程
/