Java一棵树之001线程
一、理解浓缩
线程是计算机cpu调度的最小的单位,并且jvm中的线程和机器中的线程是一一对应的,在现代编程中,很多时候为了充分利用机器资源而使用多线程,当然很多时候工作中并未使用线程,还是根据场景来选择,比如遇到有大批量数据处理时,那么就可以大大提高处理效率,说道多线程一般都会说到两个老生常谈的几个概念【并行】,【并发】【串行】,打个比方说明这三个概念,有一个做饼子的炉子,三个烧饼师傅甲乙丙要各做10块
a.【串行】师傅甲做完10块饼子,然后让第二个师傅乙做完10块饼子,最后是第三个师傅丙做,这就是串行,师傅直接互补干扰,觉得不会有并发等问题,但是有利有弊,效率一般比较底下。
b.【并发】师傅甲做完1块饼子,然后让师傅乙做1一块饼子,然后师傅丙(这里次序不是绝对的),这就是并发,对于计算机来说速度非常快,做饼子那个快你都没眨眼就做好了,当然这个炉子也可以多个的,这里重在说明最大限度使用机器资源,不让机器歇着,是不是跟资本家有点像。
c.【并行】对于并行,一个炉子是不行的,比如我们这里加2个炉子,一人一个炉子,这样三个师傅每人一个炉子同时做饼子,注意是绝对的同时(并发是假的同时,幻觉而已),这就是并行,并行更多说的是概念,比如马路双向8车道也是并行的好例子,理解概念就好。
二、使用注意事项
2.1 使用姿势
方式 | 特点 | ||||
a.继承Thread类 | 没啥说的,直接创建实例,然后start即可开启一个异步线程 | ||||
b.实现Runnable接口 | 工作中用的稍微多点,比如还可以继承点其它类 | ||||
c.使用FutureTask方式 | 使用上类似b,但是可以拿到执行结果 |
2.2 线程相关常用方法
方法名 | 简单说明 | 注意事项 | 常用使用场景 |
sleep( time) | 让当前线程睡眠一定时间阻塞 | 【Thread类的静态方法】执行此方法后线程只是让出cpu执行时间片阻塞但并未释放锁等资源 | 比如在循环里间隔一段时间执行一次任务(eg.刷接口) |
wait,wait(time) | 让调用线程阻塞,也有带时间参数的变种方法 | 【Object类实例方法】使用此方法有限制,需要先通过synchronized获得监视器锁然后再调用,调用后释放当前监视器锁,但是占有的其它的监视器锁并不释放 | 典型的生产者消费者 |
notify,notifyAll | 与wait对应,即唤醒阻塞的线程 | 【Object类实例方法】一般使用notifyAll,因为notify唤醒是不确定的,直接都唤醒就能避免(使用前也得获得监视器锁) | |
yield | 让出线程的时间片给其它线程 | 【Thread类的静态方法】执行这个方法后并不是100%就不执行了,这个方法只是通知调度器自己分得的时间片可以不用了,此时线程并未阻塞 | 实际工作中使用较少,调试代码有时可以用用 |
join | 让调用线程阻塞等待,直到线程执行完毕 | 【Thread类的实例方法】阻塞的是调用线程,功能与countdownlatch类似 | 多任务协调时使用 |
interrupt,isInterrupted, interrupted | 设置中断标志来打断阻塞 | 【Thread类的静态方法】该方法只是设置阻塞中断标志, interrupted是检测当前调用线程的中断状态的并且会清除中断标志 |
Java一棵树之001线程的更多相关文章
- Java一棵树
手里有一枚java种子,刚播下,希望长出一棵参天大树. 一.Java Java线程 二.网络 三.算法 四.中间件 五.性能指标&优化 六.设计模式
- 如何打印一棵树(Java)
1.有一棵多叉树,将它打印出来. import java.util.LinkedList; /** * 需求:按层打印一棵树 * 说明:树是保存在一个链表中 * created by wangjunf ...
- 小希的迷宫(MST单棵树判断法则)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Java数据结构之树和二叉树(2)
从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...
- A Simple Problem with Integers(100棵树状数组)
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
- java数据结构之树
树定义和基本术语定义树(Tree)是n(n≥0)个结点的有限集T,并且当n>0时满足下列条件: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结 ...
- SDUT 2129 树结构练习——判断给定森林中有多少棵树
树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 众 ...
- Java并发编程:如何创建线程?
Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...
- Java并发编程:进程和线程之由来
Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...
随机推荐
- 今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个
/* 题目描述 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定: 每个人从盒子中取出的球 ...
- python tarfile模块
TarFile类对于就是tar压缩包实例. 其由member块组成, member块则包括header块和data块. 每个member以TarInfo对象形式描述. 所以TarFile就是TarIn ...
- sql中级语句
创建联结 select n_title,n_content,t_name,t_memo from nrc_news,nrc_type where nrc_news.t_id=nrc_type.t_id ...
- python3.6下pycharm连接mysql
由于python3.x里面没有了MysqlDB,所以使用python3.6+django连接不上mysql,会报错 no modul "MysqlDB".于是就有了一个替代品,叫p ...
- Servlet中获取POST请求的参数
在servlet.filter等中获取POST请求的参数 form表单形式提交post方式,可以直接从 request 的 getParameterMap 方法中获取到参数 JSON形式提交post方 ...
- 大数据备忘录———将数据从oracle导入impala中
上周遇到了将数据从oracle导入到impala的问题,这个项目耽误了我近一周的时间,虽然是种种原因导致的,但是还是做个总结. 需求首先是跑数据,跑数据这个就不叙述,用的是公司的平台. 讲讲耽误我最久 ...
- 什么是负载均衡SLB
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性. 请看视频简介 ...
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
B. Approximating a Constant Range Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com ...
- [POI2012]ROZ-Fibonacci Representation (贪心)
大意: 给定数$n$, 求将$n$划分为最少的斐波那契数的和或差. 每次取相邻$n$的斐波那契数一定最优, 考虑证明. 结论1:存在一个最优解,使得每个斐波那契数使用不超过1次.(考虑$2F_n=F_ ...
- 实现Banner广告图片轮换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...