Java线程编程(1)

来源:互联网 发布:绘画理论书 知乎 编辑:程序博客网 时间:2024/05/16 16:20

本篇主要看下join和setDaemon方法。


首先,我们先来看这样一个例子:

代码示例1:

package org.mousel.main;/** * 我的线程类 * @author lin mouse * */class MyThread extends Thread {public void run() {System.out.println("My Thread started.");try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("My Thread ended.");}}/** * 主线程的类 * @author lin mouse * */public class ThreadTesting {public static void main(String[] args) {System.out.println("Main Thread started.");MyThread myThread = new MyThread();myThread.start();System.out.println("Main Thread ended.");}}

输出:

Main Thread started.
Main Thread ended.
My Thread started.
My Thread ended.
从这个输出信息来看,主线程会提前结束,但是子线程不会被强制终止,一般用在主线程不需要使用子线程产生的数据时。

主线程结束前:

主线程结束后:


代码示例2:

package org.mousel.main;/** * 我的线程类 * @author lin mouse * */class MyThread extends Thread {public void run() {System.out.println("My Thread started.");try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("My Thread ended.");}}/** * 主线程的类 * @author lin mouse * */public class ThreadTesting {public static void main(String[] args) {System.out.println("Main Thread started.");MyThread myThread = new MyThread();myThread.start();try {myThread.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Main Thread ended.");}}

输出:

Main Thread started.
My Thread started.
My Thread ended.
Main Thread ended.
从这个输出信息来看,使用join方法会使主线程等子线程结束后再结束,一般用在主线程需要使用子线程产生的数据时。


代码示例3:

package org.mousel.main;/** * 我的线程类 * @author lin mouse * */class MyThread extends Thread {public void run() {System.out.println("My Thread started.");try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("My Thread ended.");}}/** * 主线程的类 * @author lin mouse * */public class ThreadTesting {public static void main(String[] args) {System.out.println("Main Thread started.");MyThread myThread = new MyThread();myThread.setDaemon(true);myThread.start();System.out.println("Main Thread ended.");}}

输出:

Main Thread started.
Main Thread ended.
My Thread started.


从这个输出信息来看,子线程在主线程结束后会被强制终止,这个子线程也叫做Daemon线程。


Daemon线程称为系统监护线程,这是一种专门为系统中其他线程提供服务的线程。最典型的Daemon线程便是实现系统内存垃圾收集的线程。实际上,任何一个线程都可以通过Thread类提供的setDaemon(true)方法而被置为监护线程。另一个方面,程序也可以通过isDaemon()方法来检测和判断某个线程是否为监护线程。监护线程的特点是往往作无限循环运行,以为其他线程服务。当 jvm将退出时,系统中只剩下监护线程,监护线程也将随之结束。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不小心误点了爱奇艺扣款了怎么办 和别人吵架别人先骂你怎么办 自己人被带到了缅甸黑社会了怎么办 绝地求生忘记复制钥匙激活码怎么办 绝地求生买的钥匙激活码丢了怎么办 蓝河奶粉宝宝吃了不长肉怎么办 苹果ios版本太低激活不了怎么办 脸上被油烫伤了 起了水泡怎么办 皮肤被油烫伤起来个水泡怎么办 去泰国旅游没来得及兑换泰铢怎么办 游戏和安卓 不和 出现黑屏怎么办 邻居把垃圾放在楼梯口不丢怎么办 58热敏小票打印机口松了怎么办 王鹏的眼睛今天起疙瘩了怎么办 背包带子老从肩膀滑下来怎么办 绝地求生用手机流量更新不成怎么办 手机拍的视频在电脑上放不了怎么办 炉石传说手机点登陆游戏闪退怎么办 车到信号屏蔽区一键启动不了怎么办 王者荣耀战队活跃度满了怎么办 win10你的账户已被停用怎么办 电脑一键还原后一直黑屏怎么办? 被打了狂犬疫苗的狗咬伤怎么办 美版苹果7系统坏了怎么办 韩服的球球大作战网络不稳定怎么办 球球大作战号删了找不回来怎么办 队友传足球球的时候接不到怎么办 魅族手机中病毒锁机了怎么办? vbs打开是和文本文档一样怎么办 把电脑注册表删了电脑动不了怎么办 注册表删一项后电脑启动不了怎么办 解压过的过的软件安装包损坏怎么办 手机中病毒自动发短信扣费怎么办 苹果手机中的高德地图打不开怎么办 大晚上挂了别人的车怎么办 手机不兼容高版本微信怎么办 绝地求生右下角小地图变大了怎么办 杯孕当月做了C丁怎么办 玩全军出击手机发烫就出现卡怎么办 不小心买了彩虹六号肝帝版本怎么办 微信游戏刺激战场电脑卡怎么办