> ### Thread类方法
* yield
~~~
yield是native修饰的原生方法,作用是当前线程让出执行机会,让cpu可以优先调用其它线程。
特点:
1.当前线程不会阻塞,同样有执行机会
2.静态方法,一般用于当前线程让步
3.如果获得锁,不会释放
~~~
* join
~~~
线程让另一个线程先执行完后再执行。
特点:
1. 当前线程阻塞,直到加入线程执行完毕
2. 方法响应终断
3. 如果获得锁,不会释放
~~~
ep:
~~~
public static void main(String arg[]){
Thread A = new Thread();
A.join(); // 表示当前线程(main)让A线程执行完毕后继续执行
}
~~~
* sleep
~~~
静态方法,表示让当前线程睡眠一段时间。
特点:
1.当前线程阻塞,直到睡眠时间结束
2.方法响应终断
3.如果获得锁,不会释放
~~~
* stop、suspend、resume
~~~
stop:
1. 即刻停止run()方法中剩余的全部工作,包括在catch或finally语句中,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。
2. 会立即释放该线程所持有的所有的锁,导致数据得不到同步的处理,出现数据不一致的问题。
~~~
~~~
suspend和resume:
这两个方法一般会同时出现,否则会容易发生死锁。suspend将线程挂起,只有调用resume才能重新执行。线程挂起期间,并不会去释放任何拥有的锁资源。
~~~
> ### Object类方法
- wait 和 notify
~~~
wait 将当前线程挂起,释放锁资源, 直到执行notify或者notifyAll激活该线程重新执行。
notify 激活一个阻塞的线程。
notifyAll 激活所有阻塞的线程
~~~
* [ ] tip: wait、notify、notifyAll都是Object里的方法,和任何Object都能成为synchronized的锁对象一样,这些方法和锁之间存在着关联,当任何对象使用方法时必须在同步方法块或者同步方法中执行,并且锁对象必须为执行方法的对象。
* [ ] ep:
~~~
static Object lock = new Object();
public static void main(String []arg) throws Exception{
new Thread(()->{
synchronized(lock){
System.out.println("线程等待");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("线程执行完成");
},"等待").start();
Thread.sleep(1000);
new Thread(()->{
synchronized(lock){
System.out.println("激活线程");
lock.notify();
}
},"激活").start();
System.in.read();
}
~~~
- 2111总结
- 1.面向对象
- 1.0.1 super()与this()的区别
- 1.0.2 private、default、protected、public的访问范围
- 1.0.3 continue、break、return区别
- 1.0.4 重载和重写的区别
- 1.0.5 final的特点
- 1.0.6 抽象类与接口的区别
- 1.0.7 java类型
- 1.0.8 什么是反射
- 1.0.9 类的加载机制
- 1.1.1 jvm内存结构
- 1.1.2 java垃圾回收机制
- 1.1.3 并发问题
- 1.1.3.1 线程的状态与关系
- 1.1.3.2 并发的三大性质
- 1.1.3.3 线程的实现与使用
- 1.1.3.4 线程池相关
- 1.1.3.5 并发相关方法
- 1.1.3.6 线程相关工具
- 1.1.4 jdk8特性
- 1.1.4.1 lambad表达式的使用
- 1.1.4.2 stream API
- 1.1.4.3 Optional容器使用
- 1.1.4.4 LocalDateTime
- 1.15 io流
- 1.16 动态代理实现
- 2.JavaEE
- 2.0.1 JSP四大作用域九大内置对象
- 2.0.2 cookie与session的区别
- 4.数据库相关
- 5.git版本管理
- 7.一些问题解决
- 7.1 分布式锁如何实现