线程复习知识点总结
并行: 指的是多个线程同时运行(多核CPU)
并发: 借助CPU的高速运转,只不过切换时间极短,用户察觉不到,这也是多线程运行的原因
JVM启动也是属于多线程的,在运行主线程的同时,与之切换运行的至少也有垃圾回收线程在
JAVA实现多线程的两种方法
- 继承Thread: 由于子类重写了Thread类的run(),当调用start()时,直接去找子类的run()方法
- 实现Runnable: 构造函数中传入Runnable的引用,成员变量记住了它,start()调用run()方法内部判断成员变量Runable的引用是否为空,不为空编译时看的是Runnable的run(),运行时执行子类的run方法
Thread的方法: Thread.currentThread().getName();获取当前线程然后再获取到线程的名字
join():当前线程停止,然后等待其他线程执行结束后,再恢复运行状态(应该抛出中断异常)
yield: 让出cpu执行权给其他线程(Thread.yield())
setPriority(): 设置优先级,默认是5,值范围在0-10之间
代码块加锁的时候,不能用匿名对象,否则synchronized不起作用
非静态的同步方法的锁对象是this
静态的同步锁对象是字节码对象
同步代码块嵌套会导致死锁
StringBuffer适用于多线程下在字符缓冲区进行大量操作的情况,它是线程安全的
StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况,他是线程不安全的
String是适用于少量的字符串操作的情况
单例设计模式(保证类在内存中只有一个对象)
线程的生命周期 新建、就绪、阻塞、运行、死亡