java总结

线程通信
 *
 * 当线程在系统内运行时,线程的调度具有一定的透明性,程序通常无法精确控制线程的轮换执行,
 * 但Java也有一些机制来保证线程协调执行。
 *
 * 线程间通信的模型有两种:共享内存和消息传递
 *
 *
 * ## 多线程有什么用
 * 1)发挥多核CPU的优势。随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,
 * 4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费
 * 了75%。单核CPU上所谓的多线程那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换
 * 得比较快,看着像多个线程"同时"运行罢了。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑
 * 同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。
 * 2)防止阻塞。从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上
 * 运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU还是要应用多线程,就是为了防止
 * 阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未
 * 返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,
 * 多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。
 * 3)便于建模。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如
 * 果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这
 * 几个任务,那就简单很多了。
 *
 *  ### 什么是线程安全
 *  如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。
 *  1)不可变:像String、Integer、Long这些,都是final类型的类,任何一个线程都改变不了它们的值,要
 *  改变除非新创建一个,因此这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用。final能够
 *  做出如下保证:当你创建一个对象时,使用final关键字能够使得另一个线程不会访问到处于“部分创建”的对
 *  象。final类型的成员变量的值,包括那些用final引用指向的collections的对象,是读线程安全而无需使
 *  用synchronization的
 *  2)绝对线程安全:不管运行时环境如何,调用者都不需要额外的同步措施。要做到这一点通常需要付出许多
 *  额外的代价,Java中标注自己是线程安全的类,实际上绝大多数都不是线程安全的,不过绝对线程安全的类
 *  ,Java中也有,比方说CopyOnWriteArrayList、CopyOnWriteArraySet
 *  3)相对线程安全:相对线程安全也就是我们通常意义上所说的线程安全,像Vector这种,add、remove方
 *  法都是原子操作,不会被打断,但也仅限于此,如果有个线程在遍历某个Vector、有个线程同时在add这个
 *  Vector,99%的情况下都会出现ConcurrentModificationException,也就是fail-fast机制。
 *  4)线程非安全:ArrayList、LinkedList、HashMap等都是线程非安全的类
 *  
 *  ## 线程通信
 *  
 *  题目:有两个线程A、B,A线程向一个集合里面依次添加元素abc字符串,一共添加十次,当添加到第五次的
 *  时候,希望B线程能够收到A线程的通知,然后B线程执行相关的业务操作。
 *  
 *  方式一:使用 volatile 关键字
 *  
 *  基于 volatile 关键字来实现线程间相互通信是使用共享内存的思想,大致意思就是多个线程同时监听一个
 *  变量,当这个变量发生变化的时候 ,线程能够感知并执行相应的业务。这也是最简单的一种实现方式

## 两个常见的工具类
- Collections对集合提供一些常见的算法实现
- Arrays针对数组提供一些常见的算法实现

集合和數組之間的相互轉換
List list=new ArrayList();
Object[] arr=list.toArray();  将集合转换为数组
Arrays.asList(arr):List 可以将一个数组装换为集合,务必注意这里返回的ArrayList不是java.util.ArrayList

- static  sort(简单数值型数组)  排序
 
binarySearch用于实现在数组中进行折半查找,要求查找数据的数组必须有序

fill使用特定数据填充整个数组(每个数组的元素的值都是这个值)

copyOf数组复制,返回新数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值