JAVA/Thread
李沐泽
学习阶段,欢迎大家来讨论 QQ:3092455245.微博发表出错地方,望各位大佬指正。谢谢
展开
-
JAVA -原子变量(线程安全问题)
java中volatile关键字一文中,提到了volatile不具备"互斥性"、不能保证变量的"原子性"。原子性即不可分割性,在程序中指的是一个操作,要么全部执行成功,要么全部执行失败,不可能执行被打断。例如:i++操作 实际上是三步操作 这三步操作分别是读 int temp = i;改 i = i + 1;写 i = temp;可见i++并不具备原子性。如下代码也可说明其不具备原子...原创 2019-08-18 16:15:50 · 514 阅读 · 0 评论 -
线程Thread(JAVA) 篇九 停止线程以及线程其他方法(join)
停止线程有两种途径:1.stop()方法停止线程 – 但是该方法不安全 已过时2.run()方法结束 终止线程任务中通常都有循环结构,通过标志位控制循环就能结束线程任务。如下代码所示:class StopThread implements Runnable{ private boolean flag=true; @Override public synchronized void...原创 2019-08-17 11:24:10 · 248 阅读 · 0 评论 -
线程Thread(JAVA) 篇八 线程间通信(Lock Condition)
线程Thread(JAVA) 篇七 线程间通信(wait(),notify(),notifyAll())–等待唤醒机制其实在JAVA1.5以后关于同步和锁做了封装。如图所示通过查看API java.util.concurrent.locks包中的Lock接口可以知道:Lock实现提供比使用synchronized方法和语句可以获得的更广泛的锁定操作。 它们允许更灵活的结构化,可能具有完全不...原创 2019-08-16 22:09:16 · 159 阅读 · 0 评论 -
线程Thread(JAVA) 篇七 线程间通信(wait(),notify(),notifyAll())--等待唤醒机制
线程Thread(JAVA) 篇六 线程间通信(wait(),notify(),notifyAll())–等待唤醒机制通过上文,大致的了解到了线程间的通信-- 等待唤醒机制,但是只有两个线程,一个输入一个输出,这样效率较低,接下来需要多输出多数人以提高效率。增加输入输出线程:/** * 煤炭类[同一资源] */class Coal{ private String carName;...原创 2019-08-16 14:24:57 · 160 阅读 · 0 评论 -
ForkJoinPool 分支/合并框架
ForkJoinPool类实现了ExecutorService接口,因此也属于线程池。ForkJoinPool采用Fork/Join框架,这种框架的工作模式是在必要的时候,将一个大任务,进行拆分(fork)成若干小任务,最终汇总(Join)每个小任务结果后得到大任务结果的框架。ForkJoinPool采用工作窃取算法,即当执行任务时,它可以将其拆分成更小的任务执行,并将小任务添加到线程队列中...原创 2019-08-20 23:04:38 · 159 阅读 · 0 评论 -
线程Thread(JAVA) 篇三 synchronized(同步)
synchronized /'sɪŋkrənaɪzd/ 关键字引入:通过一个售票的实例引入此关键字售票实例说明: 有四个售票同时窗口,并且总票数为20张,编号是1-20号。根据以前线程知识编写程序有:class Ticket implements Runnable{ //票的总数 private int num = 20; public void run() ...原创 2019-08-12 08:52:12 · 158 阅读 · 0 评论 -
线程Thread(JAVA) 篇六 线程间通信(wait(),notify(),notifyAll())--等待唤醒机制
线程间通信:多个线程在处理同一资源,但是线程任务却不同如图:有两辆车,一辆车往出输送煤炭,一辆车往里输送煤炭。此图可以粗略的理解为线程间通信。多个线程:两个车如同两个线程。同一资源:煤炭为同一资源。任务不同:一辆车往里送煤炭,一辆车往出送煤炭。则两个线程任务不同。/** * 煤炭类[同一资源] */class Coal{ String carName; String wei...原创 2019-08-15 16:08:59 · 121 阅读 · 0 评论 -
线程(Thread) -- 线程池实现
实现线程的方式有四种:方式一:定义类继承Thread类方式二:定义类实现Runnable接口方式三:定义类实现Callable接口第四种便是通过线程池来实现,线程池顾名思义,就是一个载有线程的容器。它提供了一个线程集合,队列中的所有线程都保存着等待状态,当要执行任务时候,线程池中的线程就会被分配任务,任务一旦完成,线程回到线程池中处于等待状态,这样避免了创建和销毁额外的开销,提高了响应的速...原创 2019-08-20 15:03:31 · 240 阅读 · 0 评论 -
线程Thread(JAVA) 篇二
先介绍两个概念:1. CPU的执行资格: 对于线程,可以被CPU处理的线程,但还在处理队列里面排队等候,则称该等候线程具有CPU的执行资格。2. CPU的执行权: 对于线程,正在被CPU处理的线程,则称该线程具有CPU的执行权。 再看上图,从线程被创建,通过start()方法开启线程,这时,则有一个线程在运行,其他线程进入临时阻塞状态。而执...原创 2019-08-10 21:33:15 · 236 阅读 · 0 评论 -
线程Thread(JAVA) 篇五 synchronized(同步) --死锁问题
死锁的形成: 当不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源。这样就形成了死锁。粗糙的可以这样理解:餐桌上只有一双筷子,两个人吃饭,每个人都只拿到了一只筷子,并且两个人都不同喜先把筷子给对方用,都想着让对方先给自己。这样陷入了僵局,此僵局就可以理解为死锁。...原创 2019-08-14 22:06:03 · 125 阅读 · 0 评论 -
线程Thread(JAVA) 篇一
概念粗解谈到线程,必谈进程。那么何为进程?进程直译为:系统中正在运行中的程序。知道了进程,接下来谈谈线程。其实线程就是进程中一个负责执行程序的控制单元,即线程是进程的一个特定执行路径。多线程则就是一个进程中可以条执行路径。多线程的意义就是为了能够同时运行多部分代码,并且每个线程都有自己需要运行的内容,这些内容称之为线程要执行的任务。多线程的利弊 &...原创 2019-08-09 21:36:03 · 287 阅读 · 0 评论 -
线程(Thread) -- Callable实现
实现线程的方式有四种:方式一:定义类继承Thread类方式二:定义类实现Runnable接口通过定义类实现Callable接口用于创建线程,Callable接口类似于Runnable,但是Runnable不返回结果,也不能抛出异常,而Callable可以返回结果,可以抛出异常。通过查看源码可以知道开启新的线程需要Thread(Runnable)对象,现在Callable怎样传输给线程对象呢...原创 2019-08-19 10:57:19 · 664 阅读 · 0 评论 -
线程Thread(JAVA) 篇四 synchronized(同步)
synchronized(对象) { 需要被同步的代码 }通过线程Thread(JAVA) 篇三 synchronized(同步)文章详细的对同步代码块进行下说明:需要被同步的代码怎么样判定??? 需要被同步的代码,即为操作共享数据的代码。 共享数据就是多个线程都要(共同)操作的变量(数据)。如果上文中的 <font color = red>num</...原创 2019-08-13 22:28:45 · 200 阅读 · 0 评论 -
java中volatile关键字
在JAVA中,当程序运行的时候,除了main memory(主寄存器),JVM也都会为每一个线程分配一个独立的缓存,用于极高效率。每个线程都会在自己的memory中保存要访问变量的副本。...原创 2019-08-17 22:26:19 · 124 阅读 · 0 评论