1.线程和进程的区别
一个进程中可能包含多个线程,线程是不能单独存在的。当一个线程占用了某个内存空间,其他线程就只能等到。
如果一个进程没有了,线程一定会消失;但线程消失了,进程未必会消失。而且线程都是在进程的基础上并发同时运行
2.CPU中的线程是通过时间片切换的。(cup有永远执行的是优先级最高的线程。而且是无规律的)。
线程在cup中是并行的。执行顺序是同时并行进行的(时间上说同一时间)。执行顺序不固定。
3.Thread 和Runnable的区别
实现Runnable接口的类比继承Thread的类扩展性强。java单继承。
4.Thread.sleep():sleep的方法是占用cpu资源。不释放,字段代码执行完成。
5.wait与notifyAll
调用wait的时候释放同步锁。释放同步锁的时候必须拥有同步锁。必须要写在同步(synchronized)里面。
wait必须结合同步(synchronized)使用 。notifyAll 必须结合同步(synchronized)使用
6.非静态同步方法和静态同步方法
非静态同步方法(synchronized)是对this对象加锁。其他线程可以调用类里面的非同步方法。
7.静态方法跟类有关,跟实例无关。静态同步(synchronized)锁的是类本身。跟实例无关(this)
8.同步方法与同步方法才有锁的竞争。(包括静态同步与非静态同步)