用户线程、守护线程、线程的join()方法

来源:互联网 发布:百度大数据交响乐 编辑:程序博客网 时间:2024/05/01 18:31
用户线程:
// 当一个线程没有运行完成的时候,JVM是不会主动关闭该线程的.这种线程称为用户线程
// 也就是说:只要用户线程没有运行完成,JVM是不会主动关闭的(线程默认是用户线程)

main方法:

public class Main {public static void main(String[] args) {UserThread ut = new UserThread();}}
线程1:

public class UserThread extends Thread {public UserThread() {start(); // 创建好线程对象之后,该线程自动进入就绪队列}public void run() {for (;;) {System.out.println("==================================");}}}
守护线程:

// 当JVM发现只有守护线程在运行的时候,JVM会主动的关闭守护线程,然后关闭JVM
// 也就是说:JVM是不让守护线程一直运行的

main方法:

public class Main {public static void main(String[] args) {// 线程对象创建好之后,默认的都是用户线程DaemonThread dt = new DaemonThread();// 把用户线程标记为守护线程dt.setDaemon(true);dt.start();try {Thread.sleep(1000);//若不sleep()则会直接关闭不输出} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

线程1:
public class DaemonThread extends Thread {public DaemonThread() {}public void run() {for (int i = 1; i <= 10000000; i++) {System.out.println("==================================i=" + i);}}}

线程的join()方法:

// 我们在主线程中调用线程的join()方法.则主线程会被阻塞.直到t1线程运行完之后
// 主线程解除阻塞状态,重新回到就绪队列
// 换句话说:只要线程没有运行完成,则主线程永远不会执行

main方法:

public class MainThread {private static String[] arr = new String[50000];public static void main(String[] args) {// 我们先创建初始数组的线程 ,只有当初始化数组的线程把数组初始化完成之后,才能在主线程中打印数组元素InitThread t1 = new InitThread(arr);try {// 我们在主线程中调用了t1线程的join()方法.则主线程会被阻塞.直到t1线程运行完之后// 主线程解除阻塞状态,重新回到就绪队列// 换句话说:只要t1线程没有运行完成,则主线程永远不会执行t1.join();} catch (InterruptedException e) {e.printStackTrace();}// 在主线程中打印数组元素for (int i = 0; i < arr.length; i++) {System.out.println("在主线程中打印数组元素:arr[" + i + "]=" + arr[i]);}}}
线程1:

// 初始化数组的线程public class InitThread extends Thread {private String[] arr;public InitThread(String[] arr) {this.arr = arr;start();}public void run() {for (int i = 0; i < arr.length; i++) {String str = "Hello-" + i;arr[i] = str;System.err.println("初始化线程在初始化数组元素: arr[" + i + "]=" + arr[i]);}}}

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充;转载请注明出处!

1 0