目录
1.SynchronizedMap和ConcurrentHashMap的区别
2.Thread类中的yield()方法
1.概念
2.作用
3.线程池中的submit()方法和execute方法的异同
1.相同点
2.不同点
4.synchronized关键字
1.作用
2.存在问题及解决
5.synchronized最主要的使用方式
1.修饰代码块
2.修饰静态方法
3.修饰实例方法
6.线程的生命周期
7.线程的新建状态、就绪状态、运行状态
8.线程的阻塞状态-三种
等待阻塞
同步阻塞
其他阻塞
9.死亡状态
1.正常结束
2.异常结束
10.终止线程的四种方式
1.正常结束
2.使用退出标志退出线程
3.interrupt结束
4.stop结束
1.SynchronizedMap和ConcurrentHashMap的区别
1.SynchronizedMap()在调用map方法时,会对整个map进行同步;
2.ConcurrentHashMap是对map中的桶进行加锁,一个线程访问ConcurrentHashMap某个桶时,仍可以操作map。
2.Thread类中的yield()方法
1.概念
是Thread类中的一个静态方法,用来释放当前CPU的执行权
2.作用
调用此方法会暂停当前正在执行的线程对象,让其他具有相同优先级的线程执行
只能保证当前线程放弃CPU执行器,不保证其它线程一定能占用CPU
3.线程池中的submit()方法和execute方法的异同
1.相同点
两个方法都能够向线程池提交任务
2.不同点
submit()定义在ExecutorService接口中,返回类型为持有计算结果的Future对象
execute()定义在Executor接口中,返回类型为void
4.synchronized关键字
1.作用
用来解决多线程操作共享数据的线程安全问题,synchronized实现了同步机制,保证任意时刻只有一个线程操作共享数据。
2.存在问题及解决
Java的线程是映射到操作系统的原生线程之上的,若要挂起或唤醒一个线程,需要操作系统进行,操作系统实现线程之间的切换需要从用户态转换到内核态,这个转换需要相对较长的时间,时间成本较高,使得synchronized效率低。但Java1.6后从jvm层面对synchronized进行较大优化,来减少锁操作的开销。
5.synchronized最主要的使用方式
1.修饰代码块
是同步代码块时使用的方法,指定了加锁对象,进入代码块之前需要获得锁
2.修饰静态方法
是同步方法时使用的方法,为当前类加锁,访问静态synchronized方法占用的锁是当前类的锁
3.修饰实例方法
是同步方法时使用的方法,为当前对象实例枷锁,访问非静态synchronized方法占用的锁是当前实例对象的锁
6.线程的生命周期
创建-new--->就绪-runnable--->运行-running--->阻塞-blocked--->死亡dead
7.线程的新建状态、就绪状态、运行状态
新建:使用new关键字创建一个线程之后,该线程就处于新建状态
就绪:调用start()方法后,进入就绪状态
运行:获得CPU执行权,就处于运行状态
8.线程的阻塞状态-三种
等待阻塞
执行了wait()方法,jvm会将该线程放入等待队列中
同步阻塞
lock锁,若线程需要的同步锁被其他线程占用,则jvm会将该线程放入锁池(lock pool)中
其他阻塞
sleep()\jion()方法
9.死亡状态
1.正常结束
方法执行完成,正常结束
2.异常结束
抛出一个Exception或Error
调用该线程的stop()方法结束线程,但该方法容易导致死锁
10.终止线程的四种方式
1.正常结束
程序执行完成,线程自动结束
2.使用退出标志退出线程
比如:设置boolean类型的标志,通过设置该标志控制while循环退出
3.interrupt结束
调用interrupt()中断线程;注意要判断该线程是否处于阻塞状态,若处于阻塞状态,当调用线程的interrupt()方法时,会抛出 InterruptException 异常,一定要先捕获InterruptedException 异常之后通过 break 来跳出循环,才能正常结束 run 方法。
4.stop结束
强制结束线程,易引起死锁