线程之一:JAVA线程基础】的更多相关文章

示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; public class Ch09_Executor { private static void run(ExecutorService threadPool) { ; i < ; i++) { final int t…
一 cpu个数.核数.线程数的关系 cpu个数:是指物理上,也及硬件上的核心数: 核数:是逻辑上的,简单理解为逻辑上模拟出的核心数:一个CPU核心数模拟出2线程的CPU 线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数,及程数=cpu个数(2) * 核数(2)=4 Windows: wmic  然后 物理CPU数 “cpu get NumberOfCores”, CPU核心数 “cpu get NumberOfLogicalProcessors” Linux: 查看CPU…
前面我们简单介绍了线程池的使用,但是对于其如何运行我们还不清楚,Executors为我们提供了简单的线程工厂类,但是我们知道ThreadPoolExecutor是线程池的具体实现类.我们先从他开始分析. 1. ThreadPoolExecutor初探 ThreadPoolExecutor一共有3个构造方法,我们来看一下其中看起来比较复杂的这个: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAl…
好的软件设计不建议手动创建和销毁线程.线程的创建和销毁是非常耗 CPU 和内存的,因为这需要 JVM 和操作系统的参与.64位 JVM 默认线程栈是大小1 MB.这就是为什么说在请求频繁时为每个小的请求创建线程是一种资源的浪费.线程池可以根据创建时选择的策略自动处理线程的生命周期.重点在于:在资源(如内存.CPU)充足的情况下,线程池没有明显的优势,否则没有线程池将导致服务器崩溃.有很多的理由可以解释为什么没有更多的资源.例如,在拒绝服务(denial-of-service)攻击时会引起的许多线…
上节我们简单介绍了线程池,这次我们就来使用一下.Executors提供四种线程池,分别是:newCachedThreadPool,newFixedThreadPool ,newScheduledThreadPool ,newSingleThreadExecutor .下面我们分别来使用下. 1. newSingleThreadExecutor 创建一个单线程的线程池.这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务.如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它.此…
还记得我们在初始介绍线程池的时候提到了Executor框架的体系,到现在为止我们只有一个没有介绍,与ThreadPoolExecutor一样继承与AbstractExecutorService的ForkJoinPool.Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们通过表面的意思去理解ForkJoin框架:Fork即把一个大任务切割成若干部分并行执行,join即把这些被切分的任务的执行…
使用线程更好的提高资源利用率,但也会带来上下文切换的消耗,频繁的内核态和用户态的切换消耗,如果代码设计不好,可能弊大于利. 一.线程 进程是分配资源的最小单位,线程是程序执行的最小单位:线程是依附于进程的,一个进程可以生成多个线程,这些线程拥有共享的进程资源: 二.线程生命周期(相关API)1.5个阶段6种状态 5个阶段:新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead). 6种状态: public enum State { /** * T…
线程作为操作系统中最少调度单位,在当前系统的运行环境中,一般都拥有多核处理器,为了更好的充分利用 CPU,掌握其正确使用方式,能更高效的使程序运行.同时,在 Java 面试中,也是极其重要的一个模块. 线程简介 一个独立运行的程序是一个进程,一个进程中可以包含一个或多个线程,每个线程都有属于自己的一些属性,如堆栈,计数器等等.同时,一个线程在一个时间点上只能运行在一个 CPU 处理器核心上,不同线程之间也可以访问共享变量.线程在运行时,系统给每个线程分配一些 CPU 时间片,CPU 在时间片这段…
最近精读Netty源码,读到NioEventLoop部分的时候,发现对Java线程&线程池有些概念还有困惑, 所以深入总结一下 线程创建 Java线程创建主要有三种方式:继承Thread类.实现Runable接口.实现Callable接口 只有通过调用Thread.start() 方法才会真正创建一个线程, 调用Thread.run() 并不会 当调用线程关心任务执行结果时,我们应选择实现Callable接口的方式创建线程 继承方式实现创建线程 @Test public void testCre…
Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在Windows系统中,一个运行的exe就是一个进程. 线程是指进程中的一个执行流程,一个进程中可以运行多个线程.比如java.exe进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存. “同时”执行是人的感觉,在线程之间实际上轮换执行. 二.Jav…