java多线程:浅析Java多线程程序设计机制

多线程是Java语言大特性多线程就是同时存在N个执行体按几条区别执行线索共同工作情况进程线程可以从区别角度去理解就是段静态代码可以理解成组计算机命令集合进行就是这个次动态执行过程从代码加载到执行完毕个过程线程是个比进程小单位个进程再执行过程中可以产生多个线程每个线程也是由生产到销毁可以理解成是进行子集我个人用个觉得还算恰当比喻来比喻 3者QQ客户端就是登陆个QQ就是开始了这个个进程再QQ上发送消息给好友就貌似这个进程中个线程不知道这样比喻恰当否?  线程也是有状态和声明周期每个Java都会有个缺省主线程对于应用applcation来说思路方法就是个主线程Java语言使用是Thread类及其子类对象来表示线程创建个新线程生命周期如下状态:
Cw,?5M7E^  1) 新建:当个Thread类或者其子类对象被声明并创建时线程对象处于新建状态此时它已经有了相应内存空间和其他资源
?_jI-]]o4{  2) 就绪:处于新建状态线程被启动后将进入线程队列排队等待CUP服务这个时候具备了运行条件旦轮到CPU时候就可以脱离创建它主线程独立开始自己生命周期
's1rX ET%f%T~7?%Q  3)运行:就绪线程被调度并获得CUP处理边进入了运行状态个Thread类及其子类对象都有个重要run()思路方法当线程对象被调度执行时候它将自动本对象run()思路方法从第句代码开始执行所以说对线程操作应该写到run()思路方法中JAVA中文站社区门户l0F/xF`2m'{
  4) 阻塞:个正在执行线程如果再某种情况下不能执行了进入阻塞状态这个时候它不能进入排队状态只有引起了阻塞原因消失时候线程才可以继续进入排队状态等待CUP处理
7sNXCQ Dj{  5) 死亡:处于死亡状态线程不具有继续执行能力线程死亡主要原因是正常运行线程完成了全部工作即执行完了run()思路方法另外就是被提前强制终止了JAVA中文站社区门户 v0iRO1K:d&j
  线程调度也是有优先级别就是说同样排列优先级高可以提前被CPU处理主要分 3个级别高中低分别代表数字是10.5.1分别有 3个常量代表不可以被改变最小优先级常量是MIN_PRIORITY普通优先级常量是NORM_PRIORITY最高优先级常量是 MAX_PRIORITY般主线程优先级是普通另外可以通过Thread类Priority( a)思路方法来修改系统自动设置线程优先级JAVA中文站社区门户o!WYM8D7vX,\
  Java中编程实现多线程应有两种途径种是创建自己线程子类另外是实现个接口Runnable.无论是那种途径最终读需要使用Thread类及其思路方法 Thread类有两种构造思路方法public Thread()用来创建个线程对象public Thread(Runnable r)创建线程对象参数r成为被创建目标对象这个目标必须实现Runnbale接口给出该接口run()思路方法思路方法体再思路方法体中操作用两个构造思路方法创建完线程就是个新建状态等待处理然后启动线程start()思路方法启动线程对象线程进入排队状态也就是就绪状态然后线程操作 run()思路方法这个思路方法里内容是被系统处理内容如果想使线程进入休眠状态可以sleep()思路方法可以给个参数代表休眠毫秒如果给两个参数代表那秒终止线程用yield()思路方法来完成判断线程是否销毁可以用idAlive()思路方法判断线程是否活着Runnable接口只有个思路方法 run()思路方法我们实现这个接口把要操作代码写到这个思路方法中然后再把实现了整个接口例子传给Therad类构造思路方法即可操作线程JAVA中文站社区门户rt.wm \
  线程同步是个再处理线程时候需要注意问题同步思路方法要用synchronized关键字类修饰被这个关键字修饰后个线程A使用这个思路方法后其它线程想使用这个思路方法就必须等待知道线程A使用完该思路方法后方可使用下面我写个例子来介绍说明线程同步这个例子有两个线程会计和出纳他们共同有个账本他们俩都可以存取思路方法对账本进行访问会计使用存取思路方法时候写入存钱记录出纳则写入取钱记录因此会计使用账本时候出纳被禁止使用反的也是如此就是个人使用另外个人必须等待下面我通过个小Applet来实现这个事:
Aad#PI#d  import Java.applet.*;
%{9a Vaf%k2P  import Java.awt.*;JAVA中文站社区门户5OnK8W$g B Ir*n
  import Java.awt.event.*;
DE`_9{9y.sa  public MyThread extends Applet implements Runnable {
(Lun k Zs   money = 100;
5l)\kmV"ks.?  TextArea text1 = null;
l(CE#b `VUH j  TextArea text2 = null;
-F x*a#](XU X  Thread Kuaiji = null;JAVA中文站社区门户$Z;} I!Mm PO s;HL,SR
  Thread Chuna = null;JAVA中文站社区门户Z0XEG~0O
  public void init() {JAVA中文站社区门户6j4y"x|5F c e
  Kuaiji = Thread(this);JAVA中文站社区门户9htMU2{
  Chuna = Thread(this);
Cm v&i4}D1B:T  text1 = TextArea(208);
%b:@ `T6XX `vH  text2 = TextArea(208);JAVA中文站社区门户V}_p}c q
  add(text1);JAVA中文站社区门户,n0g U)r9T"h7^#p
  add(text2);
s5p'{ T D1v;mK  }JAVA中文站社区门户6~L!lT;rC%g
  public void start() {
AU:n ~-R|%e3_[)`  Kuaiji.start();JAVA中文站社区门户X,r7B [D$aH-Fa
  Chuna.start();JAVA中文站社区门户 rV?4f8k"}v k Q3Y
  }
+Z2K6Tm~;N  public synchronized void Cunqu( number) {JAVA中文站社区门户$MD7t+[B2_G
  (Thread.currentThread() Kuaiji) {JAVA中文站社区门户NsQ ytFaw
  for( i=1;i<=3;i) {JAVA中文站社区门户t}7[0B `{%z B
  money = money + number;JAVA中文站社区门户zqF'mzci|
  try {Thread.sleep(1000);}
L9cUF/MM  catch(Exception e){}
(STJ#{,VA  text1.append("\n"+money);
Z4]dJ#J;FH  }JAVA中文站社区门户I,O~"~w HS'@
  }JAVA中文站社区门户 B/`Xs \7XE$|n
   (Thread.currentThread() Chuna) {JAVA中文站社区门户 t)vf)i+Ux
  for( i=1;i<=2;i) {JAVA中文站社区门户W8kvt&rW)U
  money = money - number/2;
"b@0} V'J7PZr9`  try {Thread.sleep(1000);}JAVA中文站社区门户 E1n+IHO}S.pe
  catch(Exception e){}JAVA中文站社区门户pm$S7Wwu}
  text2.append("\n"+money);
Nc\U |Y}\4G  }JAVA中文站社区门户3?kj|nW @4n
  }
&K||#O1h:z5P_R  }JAVA中文站社区门户jKT2[n
  public void run() {
l'pI1Q ?L1J  (Thread.currentThread()Kuaiji || Thread.currentThread()Chuna) {
3["TU/g`3H!D\  for( i=1;i<=3;i) {
$E@%? [\V  Cunqu(30);JAVA中文站社区门户Q*kR ry
  }
)h7v R7a m?'qa  }
Br'} ht\0G!D _  }
%atWA4`5l  }
&Tv G5p0zb+wT  当个线程使用同步思路方法中某个变量而此变量又需要其他线程修改后才能符合本线程需要那么可以再同步思路方法中使用wait()思路方法使本线程等待并允许其他线程使用这个同步思路方法用notfyAll()思路方法同志所有由于使用这个同步思路方法处于等待线程结束等待进入同步思路方法中运行如果使使用notfy()就是单独同志个线程进行同步思路方法进行活动简单理解就是wait()思路方法让线程等待notfy()当个线程运行notfyAll()让全部线程运行虽然Java支持多线程般线程不需要我们自己处理但是也是需要了解和掌握再日后项目中获取会根据区别情况有区别需求

TAG: Java JAVA java 设计 机制 浅析 线程
Tags:  java多线程实例 java多线程实现 java多线程编程 java多线程

延伸阅读

最新评论

发表评论