Java学习随便写点笔记

***1、ArrayList和LinkedLIst都实现了 LIst接口
》ArrayList的实现是基于数组,LinkedList的实现是基于双向链表
》对于随机访问,ArrayList优于LinkedList,ArrayList可以根据下标以O(1)时间复杂度对元素进行随机访问。而LinkedList的每一个元素都依靠地址指针和它后一个元素连接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)
》对于插入和删除操作,LinkedList优于ArrayList,因为当元素被添加到LinkedList任意位置的时候不需要像ArrayList那样重新计算大小或者是更新索引
》LInkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
***2、高并发中的集合有哪些问题
》第一代线程安全集合类:Vector、Hashtable  ,  使用synchronized修饰方法 效率低下
》第二代线程非安全集合类:ArrayList、HashMap ,线程不安全、但是性能好用来替代Vector、Hashtable 使用ArrayList、HashMap,需要线程安全怎么办,使用Collections.synchronizedList(list);Collections.synchronizeMap(m)底层使用synchronized代码块锁,虽然也是锁住了所有代码,但是锁在方法里边,比所在外边性能稍有提高,毕竟方法本身就要分配资源的
》第三代线程安全集合类:在大量并发情况下如何提高集合的效率和安全呢?java.util.concurrent.*:ConcurrentHashMap:
CopyOnWriteArrayList:CopyOnWriteArraySet:底层大都采用Lock锁(1.8的ConcurrentHashMap不使用Lock锁),保证安全的同时,性能也很高。
***3、线程和进程
》线程是程序执行流的最小单位、进程是系统进行资源分配和调度的基本单位。一个程序最少需要一个进程,而一个进程至少需要一个线程。每一个进程都拥有自己的一块内存空间和变量资源,同一个进程下的多个线程则共享数据资源,所以不管线程创建和销毁工作,还是在线程之间切换工作,都比进程更轻量级、消耗的系统资源更少
》创建进程的开销大于创建线程的开销,进程之间的通信比线程间要难。线程不能独立存在,依托于进程而存在,线程可以看作轻量级的进程。多进程的稳定性高于多线程,一个进程的运行不会影响其他进程,但线程的奔溃往往会引起程序的崩溃
》创建多线程:
1、声明Thread类的子类,子类中重写Thread类的run方法   
2、声明实现一个Runnable接口类,类中实现run方法。推荐使用第二种 ,thread类本身也实现了runnable接口
》线程生命周期的6种状态:new,runnable,running,waiting,time waiting,blocked,dead。在任意时刻只能处于一种状态:new创建一个线程,创建之后不会立刻进入runnable状态,因为线程的运行需要一些条件,比如内存资源,程序计数器,java栈,本地方法栈都是线程私有的,使用需要为线程分配一定的内存空间,只有满足运行的条件才会进入runnable状态。进入runnable状态之后,不代表立刻就能进入我们的running状态,也许CPU在执行其他的任务,当得到CPU执行时间之后,线程便真正进入运行状态。在运行状态中也可能导致多个原因运行不下去,比如用户通过wait、jion方法就会让线程进入我们的waiting状态等待,通过run执行完毕或者notify方法唤醒当前线程,或通过sleep(seconds),wait,join等方法使线程进入我们的time waiting状态等待时间结束被唤醒,其中wait会释放对象锁,而sleep不会释放对象锁,也就是说如果当前线程持有某个对象的锁,则即使调用sleep方法,其他对象也无法访问这个对象。或被同步代码块阻塞或IO阻塞进入synchronized代码块中,也就是我们的blocked状态等待同步代码块释放或io完成退出synchronized代码块。最后当线程突然中断或者子任务执行完毕就会消亡就是dead状态
》守护线程:除了用户工作线程之外还有一种特殊的线程成为守护线程。守护线程依赖于创建它的线程。而用户线程不依赖。创建他的线程运行完毕之后,守护线程也会随着消失。通过setDaemon(true)方法将此线程标记为守护线程,该方法必须在线程启动前调用。当Java虚拟中唯一运行的线程都是守护线程时,Java虚拟机退出。其主要的作用就是服务与虚拟机中的非守护线程,比如虚拟机中的垃圾回收线程就是典型的守护线程。守护线程中产生的线程依然是守护线程。
***5、并行和并发
》并行Parallel,当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式就称之为并行
》并发Concurrent,在操作系统中,指同一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。
6、锁
》能锁住同步资源、悲观锁,锁不住乐观锁。
》锁住同步资源失败,线程要不要阻塞?不阻塞,自旋锁,适应性自旋锁。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值