- 进程
操作系统中运行的任务(应用程序) - 线程
1). 线程是进程中基本的执行单元
2). 线程是进程中的一个顺序执行流 - 并发原理
1). 操作系统将时间划分成很多个时间片段(时间片),然后尽可能均匀的分配给每一个线程,获得时间片的线程被CPU执行,其他线程则等待,这种微观上走走停停,宏观上都在运行,这种现象称为并发
2). 并发并不是真正意义上的同时发生 - 多线程4种实现方式
1). 继承 Thread 类
2). 实现 Runnable 接口
3). 实现 Callable 接口
4). 创建匿名内部类 - 线程状态转换图(图片来自网络):
1). java中每个对象都可以作为锁
2). 线程5种状态: 创建、就绪、运行、阻塞、终止
3). 阻塞状态分为3种类型: 同步阻塞、等待阻塞、其他阻塞
1)). 同步阻塞: 比方说 2个线程 访问同步方法: 第一个线程获取锁之后,能够访问同步方法,第二个线程获取不到锁,进入对象的等锁池等待
2)). 等待阻塞: wait和notify方法使用之前,必须先加锁,也就是wait、notify必须和synchronized一起使用;调用对象的wait方法,当前线程会释放持有的锁,而后进入对象的等待池,只有调用 对象的notify/notifyAll方法才会唤醒对象等待池中的线程进入对象的等锁池
3)). 其他阻塞: 调用 sleep/join/io操作,具体如 第6点 - 线程操作 API
1). sleep(): 休眠,是 Thread类中静态方法,调用sleep方法,当前线程会让出时间片给其他线程,也就是当前线程暂停执行指定的时间,但是锁并未释放,休眠完后,线程状态变为就绪状态。
2). wait()/notify()/notifyAll(): 等待,是 Object类中的方法,调用wait方法,当前线程会释放持有的锁,并进入 对象的的等待池,直到调用 对象的notify/notifyAll方法,才会唤醒对象等待池中的线程进入对象等锁池,获得锁的线程状态变为就绪状态。
3). yield(): 屈服,当前线程让出时间片给 具有相同优先级或者更高优先级的线程
4). join(): (主线程)等待该线程终止。join(10): 表示主线程最多等待10毫秒
5). interrupt(): 中断,实际上并不是中断正在运行的线程,而是线程收到阻塞时抛出一个中断信号,这样可以退出阻塞状态;
stop(): 停止正在运行的线程,但是不安全,已丢弃
6). 线程优先级(priority): 线程优先级划分为10级,1最低,10最高,默认5,提高线程优先级只是增大线程获取时间片的几率
7). 守护线程(daemon): 进程中只剩下守护线程时,所有的守护线程都会被强制终止 - 线程同步
1). synchronized: 同步锁、互斥锁,一般加在对象或者方法上,表示对对象或者方法的访问是互斥的
java 多线程
最新推荐文章于 2024-12-01 23:53:39 发布