![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
QQ秦政
java小白
展开
-
Java并发编程:进程和线程之由来
一.操作系统中为什么会出现进程? 说起进程的由来,我们需要从操作系统的发展历史谈起。 也许在今天,我们无法想象在很多年以前计算机是什么样子。我们现在可以用计算机来做很多事情:办公、娱乐、上网,但是在计算机刚出现的时候,是为了解决数学计算的问题,因为很多大量的计算通过人力去完成是很耗时间和人力成本的。在最初的时候,计算机只能接受一些特定的指令,用户输入一个指令,计算机就做一个操作。当用户在思...转载 2019-02-27 17:21:40 · 82 阅读 · 0 评论 -
Timer与TimerTask的真正原理&使用介绍
其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: 1 2 3 4 5 6 Timer timer =newTimer(); timer.schedule(newTimerTask() { p...转载 2019-03-01 08:30:04 · 290 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask
创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。...转载 2019-03-01 07:56:20 · 82 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 CountDownLatch类只提供了一个构造器: 1 publicCountDo...转载 2019-03-01 07:23:27 · 58 阅读 · 0 评论 -
JDK8线程池-ThreadPoolExecutor源码解析
JUC(java.util.concurrent)线程池工具类Executors是我们常用的类,处理大批量任务时,非常重要,提供程序的并发能力。 虽然很多编码规范(A公司)不推荐使用此工具类,只有明白线程池的工作原理才能在适当的情况下使用。 1.Executors用法 有3大类,分别是红黄蓝(转载 2019-02-28 21:00:06 · 235 阅读 · 0 评论 -
JDK8线程池-ThreadPoolExecutor参数
前言 我们使用线程池工具类,常用的newFixedThreadPool方法就是使用的ThreadPoolExecutor public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, ...转载 2019-02-28 20:47:42 · 605 阅读 · 0 评论 -
Java并发编程:并发容器之CopyOnWriteArrayList
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。...转载 2019-02-28 16:09:52 · 83 阅读 · 0 评论 -
Java ConcurrentModificationException异常原因和解决方法
一.ConcurrentModificationException异常出现的原因 先看下面这段代码: 1 2 3 4 5 6 7 8 9 10 11 12 publicclassTest { publicstaticvoidmain(String[...转载 2019-02-28 15:07:30 · 109 阅读 · 0 评论 -
Java并发编程:同步容器
一.为什么会出现同步容器? 在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。 List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。 注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。 像ArrayList...转载 2019-02-28 14:39:26 · 65 阅读 · 0 评论 -
Java并发编程:深入剖析ThreadLocal
一.对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。 这句话从字面上看起来很容易理解,但是真正理解并不是那么容易。 我们还是先来看一个例子: 1 2 3 ...转载 2019-02-28 13:55:23 · 77 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。...转载 2019-02-28 11:23:14 · 177 阅读 · 0 评论 -
ava并发编程:Lock
一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢? 在上面一篇文章中,我们了解到如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获取锁的线程执行完...转载 2019-02-28 10:09:40 · 110 阅读 · 0 评论 -
Java并发编程:synchronized
一.什么时候会出现线程安全问题? 在单线程中不会出现线程安全问题,而在多线程编程中,有可能会出现同时访问同一个资源的情况,这种资源可以是各种类型的的资源:一个变量、一个对象、一个文件、一个数据库表等,而当多个线程同时访问同一个资源的时候,就会存在一个问题: 由于每个线程执行的过程是不可控的,所以很可能导致最终的结果与实际上的愿望相违背或者直接导致程序出错。 举个简单的例子: ...转载 2019-02-28 08:26:31 · 97 阅读 · 0 评论 -
Java并发编程:Thread类的使用
一.线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解。 线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。 当需要新起一...转载 2019-02-28 07:58:46 · 84 阅读 · 0 评论 -
Java并发编程:如何创建线程?
一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认为java.exe或者javaw.exe(windows下可以通过任务管理器查看)。Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创建线程的话,只会创建一个线程,通常称为主线程。但是要注意,虽然只有一个线程来执行任务,不代表JVM中只有一个线...转载 2019-02-27 17:53:06 · 92 阅读 · 0 评论 -
Java中使用Timer和TimerTask实现多线程
摘要: Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。 Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。 测试...转载 2019-03-01 08:32:25 · 2199 阅读 · 0 评论