七、多线程
133.进程和线程?
进程是可执行的程序(.exe)。
线程是是进程的执行路径(执行单元)。
多线程:进程有多条执行路径,合起来就是多线程。
134.多线程并发和多线程并行是什么呢?
答:多线程并发指的是:两个或者多个任务同时请求执行,但是CPU同时只能执行一个,就会安排它们交替执行,因为间隔的时间比较短,我们看起来像同时执行的。
并行是两个或多个任务同时执行,前提是需要有多核CPU。
135.多线程的执行原理?
答: CPU在做着高速的切换。
136. 线程的执行具有随机性和延迟性。
137.线程的默认命名规则?
答:Thread-编号,编号是从0开始的。
138.线程的优先级的范围是多少?默认的优先级是?
答:线程的优先级范围是1——10。默认的优先级是5.
139.Java程序的启动原理?
答:JVM启动一个主线程,再由主线程调用某个类的main方法。
140.Java程序是多线程的吗?
答:是的,至少开启了主线程和垃圾回收线程。
141.线程的优先级越高,代表这个线程一定是第一个执行的吗?
答:不是,线程的优先级越高代表着在一定程度上让该线程可以获取更多的执行机会(执行权)。
142.线程的两种实现方式的区别?
答:
继承Thread类:
好处是:代码简单。因为是继承,所以能够直接使用Thread类的方法。
弊端是:扩展性比较差,因为继承了Thread类,所以不能再继承其他的类。
实现Runnable接口:
好处是扩展性比较强。
缺点时:代码比较冗余,因为不是继承Thread类,无法直接使用thread中的方法。
143.同步代码块和同步方法的锁是谁?
答;同步代码块的锁可以是任意类型的对象;非静态同步方法的锁是this;静态方法的锁是该类的字节码文件。(类名.class)
144.实现Runnable和Callable的区别?
答:实现Runnable接口的run方法没有返回值,不能抛异常;
而实现Callable接口的call方法可以抛异常,有返回值。
Runnable接口的实现类对象既可以作为参数传递给Thread的构造方法,也可以用线程池submit的参数;
Callable接口的实现类对象只适应于线程池。
145.线程的生命周期(线程的五种状态)是什么?
答:新建、就绪、运行(运行的时候可能发生阻塞)、死亡。
线程的六种状态:新建、就绪、运行(运行的时候可能阻塞或者等待)、死亡。
146.sleep和wait的区别?
答:(1)sleep()必须传参,表示让线程睡制定时间,到点后自动醒来,睡的时候不释放资源。。
(2)wait()可传可不传参数,不传就立马等待,传就过制定时间再等待。必须被唤醒,等待的时候回释放资源。。
147.什么时候考虑使用同步?
多线程,并发,操作同一数据。
148.为什么wait()和notify()定义在Object中?
答:因为锁对象可以是任意类型的对象。
|
|