Day27
03:如果一个方法为重写父类的方法(如实现一个接口的实现类方法) 方法内部的异常不能抛 只能try catch。 多线程共用同一资源时会发生安全隐患问题。
04:解决线程安全问题的方法:同步技术(synchronized):结构:synchronized(任意对象){线程要操作的共享数据} 这个大括号括起来的部分就叫做 :同步代码块。
05:synchronized(任意对象){线程要操作的共享数据}中的任意对象 (obj object的new对象)其实就是对象监视器 同步代码块的原理就是 线程进入代码块之前判断obj是否在(即线程同步判断 锁是否在),如果锁在(即obj在大门口)那么就获取锁 然后这个线程离开代码块的时候 还要释放锁(即把锁还给obj obj重新看门去) 所以同步代码块导致运行速度下降。
07:非静态方法中的同步对象锁 synchronized(this) 不需要再创建obj。 因为返回值为synchronized时 这个锁就已经是this了(this指的是本类对象的引用)。 静态方法中的同步锁 其实就是synchronized(本类名.class)。但是无论静态不静态 同步不同步 都是有锁的。
08:lock接口改进了synchronized lock更广泛。
09:lock.lock()获取锁 lock.unlock()释放锁 这个与之前的同步块一个意思 。但是这个lock.unlock()方法要写在finally里 意思是必须释放锁。
10:死锁就是嵌套锁 代码有点复杂。
11:标准的死锁代码:定义a类(a锁) 定义b类(b锁) 定义同步类(用奇偶数实现两个线程轮班运行) 弄出测试类(两个线程会因为互相抢夺锁而锁死)。
12:等待与唤醒机制解决了多线程有效的处理同一资源(每个线程干自己的事)(这个概念也叫做线程之间通信)。
17:资源锁要比this锁更加精准 资源锁就是多线程只能从一个门锁进入这个共同资源内来执行任务的过程。 资源锁保证了同步以及线程之间的通信的安全问题 以及保证了锁的唯一性(锁的唯一性是重中之重)。
18:线程之间的通信原理分析:一个资源在解决第一个线程问题时 第二个线程等待wait() 然后第二个线程被唤醒notify() 执行任务 然后第二个线程在进入等待 唤醒第一个线程 (来回循坏)。
来源:CSDN
作者:CYH1370
链接:https://blog.csdn.net/CYH1370/article/details/103465128