zoukankan      html  css  js  c++  java
  • ThreadFactory

    在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)


    比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。

    Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。
    User和Daemon两者几乎没有区别

    唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thread存在了,虚拟机也就退出了。 因为没有了被守护者,Daemon也就没有工作可做了,也就没有继续运行程序的必要了。

    注意:

    (1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
    (2) 在Daemon线程中产生的新线程也是Daemon的。 
    (3) 不要认为所有的应用都可以分配给Daemon来进行服务,比如读写操作或者计算逻辑。 

    package com.huiqu.rpc.core;
    
    import java.util.concurrent.ThreadFactory;
    import java.util.concurrent.atomic.AtomicInteger;
    
    public class NamedThreadFactory implements ThreadFactory {
    
        private static final AtomicInteger threadNumber = new AtomicInteger(1);
        private final AtomicInteger mThreadNum = new AtomicInteger(1);
        private final String prefix;
        private final boolean daemoThread;
        private final ThreadGroup threadGroup;
    
        public NamedThreadFactory() {
            this("rpcserver-threadpool-" + threadNumber.getAndIncrement(), false);
        }
    
        public NamedThreadFactory(String prefix) {
            this(prefix, false);
        }
    
        public NamedThreadFactory(String prefix, boolean daemo) {
            this.prefix = prefix + "-thread-";
            daemoThread = daemo;
    //当运行未知的Java程序的时候,该程序可能有恶意代码(删除系统文件、重启系统等),为了防止运行恶意代码对系统产生影响,
    //需要对运行的代码的权限进行控制,这时候就要启用Java安全管理器。 SecurityManager s
    = System.getSecurityManager(); threadGroup = (s == null) ? Thread.currentThread().getThreadGroup() : s.getThreadGroup(); } public Thread newThread(Runnable runnable) { String name = prefix + mThreadNum.getAndIncrement(); Thread ret = new Thread(threadGroup, runnable, name, 0); ret.setDaemon(daemoThread); return ret; } public ThreadGroup getThreadGroup() { return threadGroup; } }
  • 相关阅读:
    python之路——第三块(面向对象)
    python-第二块:random、shutil,json & pickle,shelve模块
    Win10和Linux系统下安装Mysql 8.0+版本
    django-(CSRF跨站请求伪造XSS、Cookie、Session、缓存、序列化、信号)
    django-(创建工程项目的基本配置、url路由系统详解、中间件&请求生命周期、admin介绍、FBV和CBV装饰器实现用户登陆认证)
    七、Web框架基础
    六、jQuery基础
    四、Dom基础
    二、css基础
    缓存和非关系型数据库的相关知识(memcached、redis)网址连接
  • 原文地址:https://www.cnblogs.com/feiyun126/p/7691969.html
Copyright © 2011-2022 走看看