1.进程(process)是操作系统中运行的1个任务,是一块包含了某些资源的内存区域。进程包含1个或多个执行单元,称为线程(thread)。创建1个进程后,该进程会自动申请1个主线程或首要线程
1)线程只能归属于1个进程,1个进程最少有1个线程
2)线程的划分尺度小于进程,使得多线程程序的并发性高
3)进程执行过程中拥有独立的内存单元,而多个线程共享内存
4)线程不能独立执行,必须依托于应用程序中
5)多线程的意义在于一个应用程序中,有多个执行部分可以同时执行,但操作系统是以进程来进行调度和管理
2.并发原理:
多个线程同时运行是假象,其实质是OS将时间划分为多个时间片段,尽可能均匀分配给每个线程,获取时间片的线程被CPU运行,其他线程等待,随微观上是走走停停,但宏观是同时运行
3.创建线程的方式:
1)继承Thread类,重写run方法
2)实现Runnable接口,重写run方法
4.线程状态:
5.线程方法:
1)Thread Thread.currentThread():获取执行当前代码片段的线程
2)long getId():获取该线程的标识符
3)String getName():获取该线程的名称
4)int getPriority():获取该线程的优先级
5)Thread.state getState():获取该线程的状态
6)boolean isAlive()/isDaemon()/isInterupted():判断该线程是否处于活跃状态/守护线程/中断
7)void setPriority(int priority):设置该线程的优先级,1-10,10级最高
8)void setDaemon(boolean):设置守护线程(后台线程),当线程只剩下守护线程时,所有守护线程将强制终止
9)static void sleep(long ms):使该线程进入阻塞状态指定毫秒,当经过指定毫秒后,线程进入Runnable状态
10)void join():等待当前线程结束
11)static void yield():使该线程让出时间片,进入Runnable状态
12)wait、notify
6.多线程并发操作同一个数据时会发生并发安全问题,解决方法是,使用synchronized关键字,将异步变为同步,线程安全与非线程安全API(前面安全,后面不安全):
1)StringBuffer与StringBuilder
2)Vector与ArrayList
3)Hashtable与HashMap
4)获取线程安全集合的方式:
-Collections.synchronizedList()
-Collections.synchronizedMap()
7.若一个程序频繁的创建和销毁线程,会过度消耗资源,导致系统崩溃,为此可用线程池解决。线程池的作用有控制线程数量和重用线程。ExecutorService实现线程有以下方法:
1)Executors.newCachedThreadPool():创建一个缓存线程池
2)Executors.newFixedThreadPool(int nThreads):创建一个固定的线程池(3/4比例)
3)Executors.newScheduledThreadPool(int corePoolSize):创建一个延迟线程池
4)Executors.newSingleThreadExecutor():创建一个单个worker线程的线程池