
多线程
文章平均质量分 59
张超帅
哈哈哈哈哈哈
展开
-
多线程编程
设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1. 写出程序。public class Main{ private int j=0;//定义变量j public synchronized add(){ j++;//定义同步方法每次只有一个线程对j进行j++操作 } public synchronized dec()原创 2017-09-25 18:42:21 · 156 阅读 · 0 评论 -
concurrent包
通常所说的concurrent包基本有3个package组成 java.util.concurrent:提供大部分关于并发的接口和类,如BlockingQueue,Callable,ConcurrentHashMap,ExecutorService, Semaphore等 java.util.concurrent.atomic:提供所有原子操作的类, 如AtomicInteger, Atomic原创 2017-10-06 20:11:57 · 249 阅读 · 0 评论 -
ThreadLocal
类ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程的私有数据。ava中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量。如何创建ThreadLocal变量原创 2017-10-06 20:52:48 · 202 阅读 · 0 评论 -
线程池TreadPoolExecutor
线程池的工作原理: 1.如果当前运行的线程少于corePoolSize(线程池的基本大小),则创建新线程来执行任务。2.如果运行的线程等于或者多与corePoolSize,则将任务加入BlockingQueue(阻塞队列)3.如果无法将任务加入BlockingQueue(队列已满),则创建新的线程来处理任务。4.如果创建新线程将使当前运行的线程超出maximumPoolSize(线程池的最大数量)原创 2017-10-01 21:49:55 · 476 阅读 · 0 评论 -
synchronized与lock有什么异同
synchronized的缺陷 如果这个获取锁的线程由于要等待IO或者其他原因(比如调用sleep方法)被阻塞了,但是又没有释放锁,其他线程便只能干巴巴地等待,试想一下,这多么影响程序执行效率。 因此就需要有一种机制可以不让等待的线程一直无期限地等待下去(比如只等待一定的时间或者能够响应中断),通过Lock就可以办到。采用synchronized关键字来实现同步的话,就会导致一个问题: 如果多原创 2017-10-02 17:00:23 · 1521 阅读 · 0 评论 -
线程之间的通信
Java提供了3个非常重要的方法来巧妙地解决线程间的通信问题。这3个方法分别是:wait()、notify()和notifyAll()。它们都是Object类的最终方法,因此每一个类都默认拥有它们。尽管在主方法中先启动了Consumer线程,但是,由于仓库中没有产品,因此,Consumer线程就会调用wait()方法进入等待队列进行等待,直到Producer线程将产品生产出来并放进仓库,然后使用no原创 2017-10-04 09:25:36 · 173 阅读 · 0 评论 -
线程共享和非线程共享
其中Method Area 和 Heap 是线程共享的 ,VM Stack,Native Method Stack 和Program Counter Register 是非线程共享的。为什么分为 线程共享和非线程共享的呢?请继续往下看。 JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counte原创 2017-10-04 14:18:23 · 460 阅读 · 0 评论 -
Synchronized和ReentrantLock重入锁
一、什么是sychronized sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类.在修饰代码块的时候需要一个reference对象作为锁的对象.在修饰方法的时候默认是当前对象作为锁的对象.在修饰类时候默认是当前类的Class对象作为锁的对象.synchronized会在进入同步块的前后分别形成monitorenter和monitorexit字节码指令原创 2017-10-06 10:50:49 · 287 阅读 · 0 评论