栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

多线程基础篇-04

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多线程基础篇-04

文章目录

第四章 Thread构造函数

文章目录
  • 文章目录
  • 一、构造Thread对象
  • 二、thread构造函数stacksize详细讲解
  • 三、daemon线程的创建以及使用场景分析


一、构造Thread对象

1、创建线程对象thread,默认有一个线程名,以thread-开头,从0开始计数,构造函数thread()。
2、如果在构造thread的时候没有传递runnable或者没有复写thread的run方法,该thread将不会调用任何东西。如果传递了runnable接口的实例或者复写thread的run方法,则会执行该方法的逻辑单元(逻辑代码)。
3、如果构造线程对象时未传入threadgroup,thread会默认获取线程的threadgroup作为该线程的threadgroup,此时子线程和父线程将在同一个threadgroup中。

public class CreateThread {
public static void main(String[] args) {
Thread t1 = new Thread();
Thread t2 = new Thread() {
@Override
public void run() {
System.out.println(“==========”);
}
};
t1.start();
t2.start();
System.out.println(t1.getName());
System.out.println(t2.getName());

    Thread t3 = new Thread("MyName");
    Thread t4 = new Thread(() -> {
        System.out.println("Runnable...");
    });

    System.out.println(t3.getName());
    System.out.println(t4.getName());

    Thread t5 = new Thread(() -> {
        System.out.println("Runnable..." + Thread.currentThread().getName());
    }, "RunnableThread");

    t5.start();
}

}

二、thread构造函数stacksize详细讲解

构造thread的时候传入stacksize代表着改线程占用stack大小,如果没有指定stacksize的大小,默认为0,0代表着回忽略改参数,该参数会被JNI函数去试用。
需要注意:改参数有一些平台有效,在有一些平台则无效。
使用-XSS10M设置
案例
public class CreateThread4 {

private static int counter = 1;

public static void main(String[] args) {

    Thread t1 = new Thread(null, new Runnable() {
        @Override
        public void run() {
            try {
                add(1);
            } catch (Error e) {
                System.out.println(counter);
            }
        }

        private void add(int i) {
            counter++;
            add(i + 1);
        }
    }, "Test", 1 << 24);
    t1.start();
}

}

三、daemon线程的创建以及使用场景分析

1、JVM虚拟机在只有守护线程运行时会退出;
2、setDaemon方法必须在start方法之前调用。
案例:
public class DaemonThread {

public static void main(String[] args) throws InterruptedException {

    Thread t = new Thread() {

        @Override
        public void run() {
            try {
                System.out.println(Thread.currentThread().getName() + " running");
                Thread.sleep(100000);
                System.out.println(Thread.currentThread().getName() + " done.");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }; //new
    t.setDaemon(true);
    t.start();
    Thread.sleep(5_000);   //JDK1.7
    System.out.println(Thread.currentThread().getName());
}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号