【2019秋冬】《实战Java高并发程序设计》第2章 并行程序基础

进程&线程
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位
进程是线程的容器
程序是指令、数据及其组织形式的描述
进程是程序的实体

面试回答:进程是资源分配的最小单位,线程是程序执行的最小单位

线程生命周期
New 刚刚创建的线程,还未开始执行,用start()调用可以开始
线程执行时处于Runnable状态
如果在执行过程中遇到了synchronize同步块,会进入Blocked阻塞状态
Waiting 进入一个无时间限制的等待
Timed_Waiting 进入一个有时限的等待,等待特殊事件完成
执行完毕后进入Terminated

新建线程

Thread t1 = new Thread();
t1.start();

start后,会新建一个线程,执行run()方法
start与run区别
start会新建一个线程,再执行run,run不会新建线程

可以直接通过继承Thread重写run方法,但是单继承比较浪费资源,所以通过继承Runnable接口最常用
默认的run方法本质也是继承Runnable接口

public class CreatThread implements Runnable{
	public static void main(String[] args){
		Thread t1 = new Thread(new CreatThread());
		t1.start();
	}
	@Override
	public void run(){
		System.out.println("Yes");
	}
}

终止线程
stop()直接终止,会导致数据不一致问题
stopMe()会选择合适时机停止

线程中断

public void Thread.interrupt()  //中断线程
public boolean Thread.isInterrupted() //判断线程是否中断
public static boolean Thread.interrupted() //判断是否中断,并清除中断状态

只设置中断不会成功,必须接后序行为

wait & notify
在Object类中
当一个对象调用了wait时,当前线程会在这个对象上等待,直到这个对象调用了notify方法
线程调用了wait后,会进入object的队列中,然后等待notify随机唤醒一个线程
线程想调用wait或notify必须先获得对象的监视器(object监视器),然后才能调用wait或notify,调用完毕后释放监视器

suspend & resume
挂起 继续执行
不推荐使用suspend,因为suspend在导致线程停止的时候不会释放资源,导致其他关联的线程无法运行,如果resume意外的在suspend前执行,会导致系统无法正常工作

join & yield
结束 谦让
join 一个线程依赖其他线程的输出,此时这个线程就需要等待依赖线程执行完毕
yield 静态方法,使当前线程让出CPU

volatile 修饰,表示该数据是可能被修改的

守护线程Daemon
在后台默默完成一些系统性服务,例如垃圾回收,

用户线程
系统的工作线程,会完成这个程序应该要完成的业务操作

用户线程全部结束时代表这个程序结束了,守护线程要守护的对象不在了
当只有一个守护线程时,虚拟机会自然退出
设置守护线程需在线程start之前设置

线程优先级
Java中用1-10表示线程优先级,数字越大优先级越高

public final static int Min_Priority = 1;
public final static int Norm_Priority = 5;
public final static int Max_Priority = 10;

synchronized的作用是实现线程同步,对同步的代码加锁,使每一次只能有一个线程进入同步块,从而保证线程间的安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值