您的位置:首页 > 编程语言 > Java开发

java多线程小示例详解

2017-08-10 15:23 447 查看
package com.chillax.controller;

import java.io.IOException;

public class MultiThread {
public static void main(String[] args) {
System.out.println("我是main主线程!");
// 下面创建线程实例thread1
ThreadUseExtends thread1 = new ThreadUseExtends();
// 创建thread2时以实现了Runnable接口的THhreadUseRunnable类实例为参数
Thread thread2 = new Thread(new ThreadUseRunnable());
System.out.println("thread1主线程将挂起7秒!");
thread1.start();// 启动线程thread1使之处于就绪状态
try {
// main主线程挂起7秒,而此时调用的子线程挂起10秒,同时一起执行,
// 时间到达七秒后,主线程继续往下走
Thread.sleep(7000);
} catch (InterruptedException e) {
return;
}
System.out.println("又回到了main主线程!");
//走到这里判断thread1这子个线程还在存活没有,答案是存活的。
//原因是主线程休息7秒,子线程休息10秒,所以在此子线程还是执行的
if (thread1.isAlive()) {//如果此线程已经开始但尚未正常终止或中止
thread1.stop();// 如果thread1还存在则杀掉他
System.out.println("ThreadUseExtends休眠过长,主线程杀掉了ThreadUseExtends!");
} else //else没有大括号的情况下,如果判断符合条件进了if方法,那么else下的第一条语句是else大括号里的,
//其余的都为else大括号外的
System.out.println("主线程没发现ThreadUseExtends,ThreadUseExtends已醒顺序执行结束了!");
thread2.start();//thread2就绪状态,随时可以调用, 把thread1。stop()后继续走 thread2.start()
try {
System.out.println("main主线程又将挂起7秒!");
Thread.sleep(7000);// 主线程挂起7秒
} catch (InterruptedException e) {
return;
}
System.out.println("又回到了主线程!");
//由于 thread2子线程等待时间为1秒,而主线程等待时间为7秒,所以thread2没有在休眠
if (thread2.isAlive()) {//如果此线程已经开始但尚未正常终止或中止
thread2.stop();// 如果thread2还存在则杀掉他
System.out.println("ThreadUseRunnable休眠过长,主线程杀掉了ThreadUseRunnable!");
} else
System.out.println("主线程没发现ThreadUseRunnable,ThreadUseRunnable已醒顺序执行结束了!");
System.out.println("程序结束按任意键继续!");
try {
System.in.read();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}


第一个子线程继承thread

package com.chillax.controller;

public class ThreadUseExtends extends Thread{
ThreadUseExtends(){}
public void run(){
System.out.println("我是thread子类的线程实例!");
System.out.println("我将挂起10秒!");
System.out.println("回到主线程,请稍等,刚才主线程挂起可能还没醒过来!");
try {
sleep(15000);//这边ThreadUseExtends线程休息10秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
return;
}
//如果该run()方法顺序执行完了,线程将自动结束,而不会被主线程杀掉
//但如果休眠时间过长,则线程还存活,可能被stop()杀掉
}
}


第二个子线程实现Runnable

package com.chillax.controller;

public class ThreadUseRunnable implements Runnable {
ThreadUseRunnable() {
};

@Override
public void run() {
System.out.println("我是ThreadUseRunnable类的线程实例并以实现了Runnable接口的类为参数!");
System.out.println("我将挂起1秒!");
System.out.println("回到主线程,请稍等,刚才主线程挂起可能还没醒过来!");
try {
Thread.sleep(1000);//等待1秒,和主线程同时一起执行等待
} catch (InterruptedException e) {
return;
}
}

}


小示例完成,是不是感觉有多理解了呢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息