2019.8.6学习汇总
1.什么叫线程安全?
多线程必须与单线程运行的结果一致,与前后运行与预想运行的结果一致。出现结果不一致就是线程不安全。eg:多个线程在运行的时候,可能同一个结果出现了多次,与预想的结果不一样,这个时候线程不安全
2.保证图片中的代码块在运行的时候其他的线程不会影响该线程的运行结果,必须加synchronized,表示同步该方法
线程的生命周期
以及线程各个时期的作用
阻塞状态:
eg:
有时候可能会两个线程同时运行,每个线程都需要两个锁对象才能运行,但是因为线程是抢占式运行,A线程和B线程可能都需要两把锁,但是A线程拿到了一把,B线程也拿了一把,这个时候两个线程都不能完整的运行,这个时候就会等待,就会出现死锁状态。
StringBuffer和StringBuilder区别?
StringBuffer中类方法采用synchronized修饰,属于线程安全,数据相对更加安全,加锁的同时,会对数据进行加工,所以他会比StringBuilder加载数据慢一些StringBuilder类中所有的类方法没有用synchronized修饰,表示该类没有进行数据同步,特殊的环境的可以干扰里面的数据运行,属于非线程安全,但是因为没有给他的数据上锁,所以的数据处理相对于StringBulider中数据运行较快。例如下面StringBuffer中的类:
同样的道理,Vector类中的方法有synchronized修饰,属于线程安全,但是数据加载相对降低。
让线程陷入等待通过调用wait()方法,这个时候需要激活线程,可通过notify()来激活单个线程,notifyAll()可以激活所有的线程。
java 浅拷贝和深拷贝
浅拷贝:只拷贝一个对象,并没有拷贝他的结构
深拷贝:拷贝了对象以及他的机构
https://www.cnblogs.com/shakinghead/p/7651502.html这里面可以深入了解
从某个数组里面选取任意一个属性:
int index=(int)(Math.random()*arr{1,2,3,45,,67,8,90,}.length获取下标
int j=arr[index]; //获取到arr里面的任意个属性,随机事件。