1.上下文切换
content switch
单核处理器处理多线程执行代码时,CPU通过给每个线程分配CPU时间片(一般几十毫秒)来实现这个机制。
多线程不一定快:
1.1 单核用多线程的情况:
I/O密集型,防止独占时间过长,一个占,另一个可操作另外的部分。
1.2减少上下文切换的方法
- 无锁并发编程:避免多线程竞争锁引起的上下文切换;
- ID以hash算法取模分段,不同线程处理不同数据。
- CAS算法:Java的Automic包使用它更新数据,无需加锁;
- 使用最少线程:避免创建不需要的线程;
- 协程:在单线程里实现多任务调度,并在单线程里维持多个任务间的切换。
2.死锁
多个并发进程因争夺系统资源而产生相互等待的现象。
public class DeadLockDemo{
private static String A="A";
private static String B="B";
public static void main(String[] args) {
new DeadLockDemo().deadLock();
}
private void deadLock() {
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
synchronized(A) {
try {
Thread.currentThread().sleep(2000);
}catch(InterruptedException e) {
e.printStackTrace();
}
synchronized(B) {
System.out.println("1");