多线程1 G: i, ?9 A4 b3 Z* \
- 什么是线程?" l) ^& o% X/ R9 t% {: E
/ K w8 ]. i# K0 d8 u
轻量级的进程 9 y! U0 ]/ S( |0 N9 a$ @; W
- 线程的三个部分是?
* s$ O4 E- g% Z. {
' w8 ]! a8 l# a ?! n5 o+ e
处理机 代码 数据
, I4 `# Y$ ?1 a/ n. \- 为什么使用多线程: @) K+ |! ?2 t! R
- v4 s0 c' w/ S4 b
使UI响应更快 利用多处理器系统 简化建模 * ]5 ]& C3 c: i. j" ?4 ~
- 代码示例:Java中实现多线程的两种方式,包括如何定义多线程,如何使用多线程# b2 e6 P- X2 x# D
5 {0 K8 v2 \8 x' r4 K! n
实现Runnable接口7 Q! y. k# r1 z9 f* N( N
class Thread1 implements Runnable{
7 W6 e' Z2 g' x4 _& L' F$ d public void run( ){% Q! g! I4 p4 r, ^7 Q0 R/ H. u
//run里一般写一个while(true)循环/ z' z2 _" f( V8 }* V7 V
System.out.println(“Runnable“);
1 K( F8 x" | P0 |/ l! v i: y" m }
6 Q0 k4 q! Y% g8 a7 W5 m5 W }
/ U6 u2 E c+ S) h4 E& Q public class Test{2 A8 j4 l" p7 p( j
public static void main(String[] a){% F3 c3 O6 r: N8 G# g7 {
Thread1 r = new Thread1(); y& m7 U* c1 }
Thread t1 = new Thread(r);
! a5 L6 t" d$ S9 j, ~; Y Thread t2 = new Thread(r);+ K. s: p: }# n
t1.start();
: h9 Q& z$ A9 V, Y# F7 K t2.start();; H$ Q7 @( c. m$ v
}
& v E0 k1 @% P% m* ^ }" o w+ ]' D* ]: l' l" C3 W* H
继承Thread7 p7 W1 u5 N! _
class Thread2 extends Thread{
5 J! `7 _" Y) \/ g public void run(){) a2 s& M, Z1 P: I$ S
System.out.println(“extends“);
, S0 m8 Y. o7 p% q5 U }
: g1 o3 v' c* |& @: A9 A }# O9 t \6 W$ N1 N6 {
$ K& ]# F& f- r+ v% t8 T; j
public class Test{7 W7 e \+ }7 G$ |- C6 Y
public static void main(String[] a){
- y' x: Q4 G" n B. S/ Z- ] Thread t = new Thread2();
/ z/ q2 s) L+ p t.start();
: Y) r9 P6 W d% p& b) J }
4 ?2 J) r7 F* r1 G+ u# J } 0 c& |( n. a) e6 F9 O
- 如何实现线程的调度?如何暂停一个线程的运行, @ ?- B: L+ Z/ h! h: s
4 t" o, G* s0 G) @$ U5 A
调度用wait和notify, —- sleep()
: A0 {5 r8 R; {3 o; i4 i& v- 什么是线程的优先级
5 W+ A8 ^2 ]! R9 R2 } a/ F
1 e: E( d5 K' I5 o3 a2 {, F) g3 d
判断哪个线程先执行的级别 5 K5 t: H+ \& z8 n& N# A* o
- 简述sleep方法和wait方法的功能和区别& f2 u$ ]7 [( b
9 J4 r2 w6 _( P5 U: K
sleep是让线程休眠一段时间 wait是让线程挂起
5 Y8 I! _4 ]( M1 h( S& L2 x% k- 什么是守候线程
& Z; I' J! y% m1 [6 W- b8 U6 d0 L- I
隐藏在后台持续运行的线程 & f+ d+ L3 T: q1 v
- 什么是临界资源+ ]5 g+ l" e! m" b D, t- V8 i; O. y
7 [9 i) P+ ^9 n7 P. b7 `2 r% `
指多个线程共享的资源 : ~/ J8 h; M$ D3 H) \
- 什么是互斥锁,Java中如何实现% H5 W s+ G9 ?/ n1 b4 q
: f1 r% S5 z; q
用来保证在任一时刻只能有一个线程来访问临界资源的那个标记 在Java中使用 用在对象前面限制一段代码的执行 用在方法声明中,表示整个方法为同步方法。 $ M& Q6 {* c; o4 c
- 什么是死锁?如何避免?
6 I$ |7 Q& O5 X* x
& T: y3 G, X8 c
如果程序中有多个线程竞争多个资源,就可能会产生死锁。当一个线程等待由另一个线程持有的锁,而后者正在等待已被第一个线程持有的锁时,就会发生死锁。 要避免死锁,应该确保在获取多个锁时,在所有的线程中都以相同的顺序获取锁。尽量少用临界资源。
6 e2 C: Z$ t/ p0 Q- ^- 简述wait和notify,notifyAll的使用; c m( b/ n: k+ y
( ~+ q' C, h% O" T! ^
被锁定的对象可以调用wait( )方法,这将导致当前线程被阻塞并放弃该对象的互斥锁,即解除了wait( )方法的当前对象的锁定状态,其他的线程就有机会访问该对象。 notify使等待队列上的一个线程离开阻塞状态 notifyAll使等待队列上的所有线程离开阻塞状态
, b2 A- |0 ^3 O+ f |