![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发
我是奥特man
每天都有新收获
展开
-
Java多线程-Thread&ThreadPool
1. 什么是多线程编程让顺序执行的没有依赖关系的操作,并行化。从而提高减少耗时。2. java怎么启动一个线程去异步执行任务extends Thread类implements Runnable接口implements Callable接口(带返回值)3. java线程生命周期,结合Thread线程的各个方法4.java线程池概念5.java线程池怎么执行任务6.java线程池实现流程(手动写一个线程池)6.工具监控,查看当前运行的线程7.线程执行过程中抛出异常的处理...原创 2020-09-13 09:37:34 · 195 阅读 · 0 评论 -
java BIO,NIO在单服务器,多客户端通信上的应用
1.BIO,即传统的阻塞式io方式 下面是具体的例子: server:package 多线程实现socket阻塞式通信;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.Out原创 2017-07-19 10:22:28 · 390 阅读 · 0 评论 -
jvm中锁的优化
除了上一篇提到通过锁膨胀来对锁机制进行优化外,还存在: 1.自旋锁(轻量级锁中用到了) 线程未获得资源时,不直接阻塞,而是通过执行一段空循环,来等待锁释放,然后获取锁,若执行了指定的循环次数后,线程还是没有获得锁资源,会被挂起。这种适用于不是很多线程,每个线程的执行时间很短。2.自适应自旋锁 是对自旋锁的优化,通过前一个线程在该锁上的自旋时间和锁拥有者的状态来决定自旋次数3.锁消除 当不存在原创 2017-07-22 09:43:03 · 296 阅读 · 0 评论 -
java synchronized锁的理解
mark word:存储对象的hashcode或锁记录的信息, 对象头包括:锁状态,是否是偏向锁,锁标志位 1.锁状态分类:无锁状态,偏向锁状态,轻量级锁状态,重量级锁状态。 <1>偏向锁:为了解决,在获得锁时,存在同一个对象,对锁的多次获取,释放,避免CAS操作而做的优化。 偏向锁的获得锁过程: (1)检测mark word是否为可偏向状态,即是否为偏向锁为1,锁标志位为01. (2)原创 2017-07-22 08:56:52 · 365 阅读 · 0 评论 -
理解同步与异步,及java中实现同步机制的方法
线程间的同步访问线程同步机制是解决多线程访问共享资源时导致的内存不一致问题。 一般说到的hashmap是异步的,HashTable是同步的,是说hashmap是线程不安全的,hashtable是线程安全的。线程同步访问的方法: 1.加锁 2.volatile 3.ThreadLocal 4.wait(),notify()/await(),singal()同步/异步 同步:发送一个请求,需原创 2017-06-11 14:39:46 · 1464 阅读 · 0 评论 -
理解java中的线程池
1.引入线程池的原因 对于多线程编程,处理每个请求都要创建一个线程,这不仅要花费时间在创建线程的过程中,还会出现创建线程过多未释放导致的系统内存不足,内存溢出问题,因此引入线程池的概念。线程池,就是在一个容器中创建适量的线程,在程序访问的时候直接调用该线程即可访问。2.类比数据库连接池。 数据库连接池与线程池类似,dao层访问数据库时,首先会,加载驱动,建立连接,而每次频繁的建立连接肯定会大大降原创 2017-04-21 14:49:54 · 1558 阅读 · 1 评论 -
wait,notify,非阻塞队列实现生产者,消费者模型
import java.util.PriorityQueue;/** * @author wangpei * @version 创建时间:2017年4月20日 下午5:01:44 生产者消费者模型的wait,notify实现 */public class ShengChanZhe { private int size = 10;// 初始化非阻塞队列的长度为10 Priori原创 2017-04-20 17:20:08 · 403 阅读 · 0 评论 -
理解java阻塞队列BlockingQueue
java阻塞队列是一个支持阻塞的插入,移除的队列。 阻塞的插入:向队列中插入元素时,若队满,则队列会阻塞插入的线程。 阻塞的移除:移除队列中的一个元素时,若队空,则队列会阻塞移除的线程。直至队列非空。从上图中可以看出,阻塞队列的所有实现类有: 所有已知实现类: ArrayBlockingQueue, DelayQueue, LinkedBlockingDeque, LinkedBlocki原创 2017-04-20 15:39:08 · 464 阅读 · 0 评论 -
理解进程,线程概念
在操作系统层次,多个任务并发执行,操作系统为这些任务都分配了内存空间。这些任务就是进程。 在一个任务内,存在多个线程同步执行,它们共享这个操作系统为这个任务分配的地址空间。进程,让操作系统的并发成为可能,线程,让进程内的并发成为可能。 对于一个单核cpu,qq执行的同时,你还在浏览网页,此时,qq整体就是一个进程,浏览网页的整体就是另一个进程,而qq内部,你发消息的同时还在刷动态,刷动态,发消息原创 2017-03-11 08:47:55 · 217 阅读 · 0 评论 -
java同步集合容器(进行串行化)
在Java中,同步容器主要包括2类: 1)Vector、Stack、HashTable 2)Collections类中提供的静态工厂方法创建的类 Collections类是一个工具提供类,注意,它和Collection不同,Collection是一个顶层的接口。在Collections类中提供了大量的方法,比如对集合或者容器进行排序、查找等操作。最重要的是,在它里面提供了几个静态工厂方原创 2017-03-11 15:33:50 · 308 阅读 · 0 评论 -
理解ThreadLocal
ThreadLocal:线程本地存储,为每个线程都创建了变量的副本,线程在访问变量时,可以直接访问自己内部的副本变量。 理解几个概念: 在java中ThreadLocal是一个类。 ThreadMap是一个类, Thread类是线程类。ThreadLocal类中有一个ThreadMap的内部类。 Thread类中有一个成员变量是threadLocals 其类型为:ThreadLocalM原创 2017-03-11 15:18:55 · 385 阅读 · 0 评论 -
Thread方法解释(join,sleep,yield,interrupt)
join方法 几种重写的join方法void join() 等待该线程终止。 void join(long millis) 等待该线程终止的时间最长为 millis 毫秒。 void join(long millis, int nanos) 等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。 抛原创 2017-03-11 11:15:17 · 1528 阅读 · 0 评论 -
java并发编程之lock锁
使用显示的lock锁 lock对象必须显式的,创建,锁定,释放。 接上一节synchronized的插入例子 改写成lock形式:class InsertData { private ArrayList<Integer> arrayList = new ArrayList<Integer>(); private Lock lock = new ReentrantLock();原创 2017-02-10 14:02:05 · 328 阅读 · 0 评论 -
java并发编程之synchronized
1.多个线程访问同一资源时会产生线程安全问题,因此要实现同步互斥访问资源。举例:在购票时,总票数10,售票员1卖一张票票数为9,但在售票员1卖这张票的过程中,售票员2也在卖票其开始读到总票数也为10,卖一张9,然后两个售票员都读到了余票为9的错误的信息。2.解决线程安全问题方式:(1)synchronized同步方法或同步块(2)lock锁 在java中,每个对象都有一个锁标记,当线程要访问被syn原创 2017-02-10 12:11:03 · 229 阅读 · 0 评论