首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

ThreadLocal【Java】查看全文
ThreadLocal存储结构图.png
ThreadLocal是指线程变量,这些变量是线程私有的,不和其他线程共享,所以不存在线程安全的问题。和一般同步机制使用锁等方式进行进行临界区的互斥不同,ThreadLocal通过拷贝变量副本来进行数据隔离。

存储结构 在JDK1.8之后,每个Thread会关联一个Map,称为ThreadLocalMap,存放这个线程的ThreadLocal变量,这个ThreadLocalMap的Key就是ThreadLocal变量。 在读写ThreadLocal的时候,首先获取当前线程,然后当前线程可以关联到ThreadLocalMap,再通过ThreadLocal对Map进行读写。 在JDK1.8之前的版本中,每个ThreadLocal都关联一个单独的map对象,map的Key是当前线程,value是ThreadLocal的值。 内存泄漏 ThreadLocalMap中的Key到ThreadLocal变量的引用是弱引用,弱引用在垃圾回收的时候会被优先回收。 因为ThreadLocal的生命周期和ThreadLocalMap的生命周期(即Thread的生命周期)不一致,所以可能会出现ThreadLocal被垃圾回收,但是ThreadLocalMap中的Value值依然存在,就会造成内存泄漏。 为了避免内存泄漏,在每次使用ThreadLocal变量之后,最好手动清理,不仅仅可以避免内存泄漏,也减少了线程共享(例如线程池)时候的可能引发的逻辑错误。 ThreadLocal的应用场景如下: Session会话信息 数据库链接等信息

线程不安全的工具类,例如Random,SimpleDateFormat。
线程池【Java】查看全文
Java的线程池实现.png
线程池是一种池化的技术,其实现是长期固定的维护数量在一定范围之内的线程资源,当新任务到达的时候可以使用这些资源执行任务。

线程池主要作用如下: 线程复用,创建以及销毁线程是成本较高的操作,线程池将线程池化之后降低响应的资源消耗。 提高响应速度,在线程池还有剩余线程的情况下,任务可以立即获取到可执行的线程资源。 减少线程泄漏的风险,线程资源是系统稀缺资源,线程池对线程的统一管理减少了线程被大量创建从而导致的系统风险。 线程池有三个核心的模块,分别是执行任务的工作线程,存放任务的存储,以及拒绝策略。 工作线程 工作线程是执行任务的载体,也是池化的最重要的资源,工作线程的数量决定了线程池响应的速度,但是过多的池化线程资源,会造成线程资源以及内存资源的浪费,影响整个系统的吞吐量。同时大量线程会带来线程切换的成本,也会影响性能。 Java线程池的工作线程数量一般和两个值相关,corePoolSize和maximumPoolSize。 corePoolSize指定了线程池中核心线程的数量,所谓核心线程是值当线程池中的工作线程数量小于该值的时候,可以立即创建新的线程资源。 maximumPoolSize指定了线程池中最大的线程数量,当阻塞队列已满的情况下新任务进来,会创建新的线程直到maximumPoolSize。 如果使用无界的阻塞队列,则线程数量永远不会达到maximumPoolSize(maximumPoolSize>corePoolSize的情况) 阻塞队列

当线程池的数量达到corePoolSize的情况下,如果有新的任务需要执行,会将这些任务放入阻塞队列暂存,当有新的线程释放之后,会消费阻塞队列的数据…
DNS查看全文
DNS解析过程.png
DNS是域名服务系统。

TCP/IP协议中的IP层都是通过IP地址进行通信的,但是IP地址是一串数字,不利于记忆,为了更加便于通信,需要名字服务,可以通过容易记忆的命名来替代IP地址,通信过程中再通过名字服务将名字更换为IP地址。 IP的名字服务就是域名。 域名一般通过三级结构构成,A.B.C,例如www.aigetting.com,其中com是顶级域名,aigetting.com是权威域名。 DNS系统本质就是通过域名查询IP的地址的系统,DNS提供了一个分层的命名空间,企业和个人可以将名字注册到DNS系统。通信的时候可以通过这些名字获取实际提供服务的服务器的IP地址。 DNS也是一个分布式的数据库,可以可靠的为全球提供服务。 DNS服务器 域名一般是多层结构,按照“.”作为分隔符可以将域名切分为多个层次,不同层次对应不同的命名空间。 例如www.aigetting.com,其中com是顶级域名,aigetting.com是二级域名,www.aigetting.com是三级域名。 DNS解析的过程实现是首先请求DNS解析器,例如请求www.aigetting.com,DNS解析器会首先查询是否已经缓存了该域名,如果有缓存则直接返回。 如果DNS解析器没有缓存该数据,则会请求根域名服务器,根域名服务器会根据访问的顶级域名返回对应的顶级域名服务器,比如返回处理com顶级域名的顶级域名服务器,顶级域名一般通过组织(例如.com、.edu 或 .org)和国家(例如.cn、.hk、.us等)进行区分。 在路由到顶级域名服务器之后,会讲DNS请求转发到对应的权威域名服务器。权威域名服务器会返回对应的IP地址信息。

根据职责可以把DNS服务器分为根域名服务器…

热门分类

算法题库

精选内容