①什么是多线程:
开启一个程序就是开启一个进程;一个进程中不同的任务是不同的线程。
②线程的生命周期:
new(新创建)
Runnable(包含就绪、运行状态)
Blocked(被阻塞)
Waiting(等待)
Timed Waiting(计时等待)
Terminated(被终止)
③线程的调度:
Java是抢占式调度模型,哪个线程的优先级比较高,抢到的cpu时间片概率就高些
其他编程语言中还有均分式调度模型
④ 线程优先级:
最高10,最低1,默认是5
⑤线程常用方法:
yield:所在当前线程礼让,不一定成功
join:线程的插队,所在当前线程阻塞
⑥怎么解决线程安全问题(排他锁、互斥锁):
- 先使用局部变量代替“实例变量”和”静态变量“
- 如果必须是实例变量,可以考虑创建多个对象,这样实例变量的内存不共享
- 如果不能使用局部变量,对象也不能创建多个,选择同步机制
synchronized (this){//这种同步机制最灵活
//取款之前余额
double before = this.getBalance();
//取款之后余额
double after = before - money;
//更新余额
this.setBalance(after);
}
⑦线程有三种实现方式:
- 继承Threadl类实例化后再start
- 实现接口的对象要作为参数放到Thread类实例化成线程对象再启动new Thread(myThread,"小青").start();好处是避免了单继承限制可以多个线程放一个对象
- 线程第三种方式实现Callable接口;可以获取返回值效率较低
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask task = new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
int a=100;
int b=100;
return a+b;
}
});
Thread thread = new Thread(task);
thread.start();
Object o = task.get();
System.out.println(o);
}

2442

被折叠的 条评论
为什么被折叠?



