多线程
文章平均质量分 56
夏至&未至
后台开发,前端瞎倒腾,py爱好者,机器学习中...
展开
-
如何让10个线程按照顺序打印0123456789?(指定多个线程的执行顺序)
这个题目其实就是指定多个线程的执行顺序,基本思路如下: 设定一个orderNum,每个线程执行结束之后,更新orderNum,指明下一个要执行的线程。并且唤醒所有的等待线程。 在每一个线程的开始,要while判断orderNum是否等于自己的要求值!!不是,则wait,是则执行本线程。 代码如下:(1)一个锁对象类,主要包括一个orderNum,用来指定此时输出...原创 2018-09-17 16:03:14 · 5434 阅读 · 0 评论 -
Syschronized的底层实现原理以及各种锁的理解
java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开始都是无锁的,随着线程间争夺锁,越激烈,锁的级别越高,并且锁只能升级不能降级。java对象头 锁的实现机制与java对象头息息相关,锁的所有信息,都记录在java的对象头中。用2字(32位JVM中1字=32bit=4baye)存储对象头,如果是数组类型使用3字存储(还...原创 2018-09-29 11:48:46 · 2761 阅读 · 0 评论 -
乐观锁的实现机制--CAS(Compare And Set)
众所周知锁有两种:乐观锁与悲观锁。 独占锁是一种悲观锁,而 synchronized 就是一种独占锁,synchronized 会导致其它所有未持有锁的线程阻塞,而等待持有锁的线程释放锁。 所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。而乐观锁用到的机制就是CAS。 下面以一组漫画来全面讲解CAS,...转载 2018-09-29 12:29:36 · 18732 阅读 · 16 评论 -
JAVA代码演示如何中断运行中的线程
Java中终止线程的方式主要有三种:1、使用stop()方法,已被弃用。 原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的“残疾”数据,不符合完整性,所以被废弃。2、使用interrupt()中断的方式。 注意使用interrupt()方法中断正在运行中的线程只会修改中断状...原创 2018-09-27 15:30:55 · 804 阅读 · 1 评论 -
JAVA多线程常见的十大问题
一、进程与线程?并行与并发?进程代表一个运行中的程序,是资源分配与调度的基本单位。进程有三大特性:1、独立性:独立的资源,私有的地址空间,进程间互不影响。2、动态性:进程具有生命周期。3、并发性:多进程可以在单核CPU上并发运行。线程代表进程中的一个顺序执行流,多线程就是一个进程中的多个顺序执行流。线程也被称为轻量级的进程,是系统运行的基本单位。多线程的优势(进程线程区别)...转载 2018-09-27 14:11:42 · 17079 阅读 · 0 评论 -
多线程面试题(一):现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
问:现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?答:要保证T1、T2、T3三个线程顺序执行,可以利用Thread类的join方法。问:join方法的作用?答: Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才...原创 2018-09-25 10:16:03 · 12164 阅读 · 4 评论 -
JAVA面试中多线程并发的技术要点
一、概念什么是线程 一个线程要执行任务,必须得有线程 一个进程(程序)的所有任务都在线程中执行的 一个线程执行任务是串行的,也就是说一个线程,同一时间内,只能执行一个任务 多线程原理 同一时间,CPU只能处理1条线程,只有一条线程在工作(执行) 多线程并发(同时)执行,其实质是CPU快速的在多线程之间调度(切换) 如果线程过多,会怎样? ...转载 2018-09-25 09:09:22 · 301 阅读 · 0 评论 -
基于LinkedBlockingQueue来实现生产者和消费者模型Demo
生产者消费者问题是多线程的一个经典问题,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类:采用某种机制保护生产者和消费者之间的同步; 在生产者和消费者之间建立一个管道。第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用...原创 2018-09-19 10:53:57 · 3460 阅读 · 1 评论 -
一个JAVA死锁的Demo
死锁的条件肯定是两个锁以上时,才会 发生死锁,以下Demo是模拟的两个锁,通过两个线程分别调用两个方法,这两个方法加锁的顺序正好相反,从而造成两个线程相互等待,互不释放锁package com.threadDemo;public class DeadlockSample { //必须有两个可以被加锁的对象才能产生死锁,只有一个不会产生死锁问题 private final O...原创 2018-09-18 20:29:03 · 413 阅读 · 0 评论 -
使用Executor创建线程的几种方式
方式一:newCachedThreadPoolpackage com.Executors;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Run { public static void main(String[] args) thro...原创 2018-09-17 22:26:22 · 2102 阅读 · 1 评论 -
ThreadPoolExecutor详解,包括工作原理、注意事项、代码演示
创建线程池的方式: Executors工厂类 newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool等 ThreadPoolExecutor 推荐 ScheduledThreadPoolExecutor 阿里JAVA开发手册: 【强制】线程池不允许使用 Executors 去创建,而是通过 ...原创 2018-09-17 22:03:30 · 479 阅读 · 0 评论 -
漫画:什么是CAS机制?(进阶篇)
上一期为大家讲解的CAS机制的基本概念,没看过的小伙伴们可以点击下面的链接: 漫画:什么是 CAS 机制?目录1、Java当中CAS的底层实现2、CAS的ABA问题和解决方法 这一期我们来深入介绍之前遗留的两个问题:1、Java当中CAS的底层实现2、CAS的ABA问题和解决方法 1、CAS的底层实现 首先...转载 2018-09-30 10:19:19 · 1349 阅读 · 1 评论