1.volatile 线程变成 2大特点 可见性 和 互斥(有序性)
在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念:
1.原子性
原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
一个很经典的例子就是银行账户转账问题:
比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。
2.可见性
可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
3.有序性
有序性:即程序执行的顺序按照代码的先后顺序执行。
socket 链接超时时间设置 setSoTimeOut(); 得写文件设置超时时间好像有个一个 tryLock() 方法
jvm运行流程:
首先是初始化jvm ---内加装器开始工作 (内存分为5大模块:方法区(如类、静态变量和常量,大小由-XX:PermSize和-XX:MaxPermSize来调节 方法区是各个线程共享的区域,用于存储已经被虚拟机加载的类信息(即加载类时需要加载的信息,包括版本、field、方法、接口等信息)、final常量、静态变量、编译器即时编译的代码等),堆(内存分配,存储对象 堆大小由-Xmx和-Xms来调节),栈(存储局部变量表,操作,方法出口等与方法执行相关的信息,栈大小由Xss来调节,方法调用层次太多会撑爆这个区域),指针(程序读取文件行数记录),本地方法区)
Treemap和TreeSet 可以自动实现排序;ArryList 删除重复元素 正确的做法就是用 iteration 迭代循环去重
注意并发(Concurrent)和并行(Parallel)的区别:
并发是指用户线程与GC线程同时执行(不一定是并行,可能交替,但总体上是在同时执行的),不需要停顿用户线程(其实在CMS中用户线程还是需要停顿的,只是非常短,GC线程在另一个CPU上执行);
并行收集是指多个GC线程并行工作,但此时用户线程是暂停的;
所以,Serial和Parallel收集器都是并行的,而CMS收集器是并发的.
分布式缓存(作用是什么?为什么要用分布式缓存,用了后怎么维护) 分布式环境 一般会选择用Nosql 来实现 通过一种算法保证数据能存到对应服务上(科学算法是在一个圆上做处理,服务器会算出一个hash值存在一个圆的节点上,值的话就根据算出来的值离他最近的结算去存取值)