金色坐标

关注互联网应用和搜索引擎技术

« 高性能网站开发技术(三)Java 并发(多线程)开发技术(二) »

Java 并发(多线程)开发技术(一)

1,Thread
 
轻量级的进程,每个线程有自己独立的调用栈(对应Java中的StackTrace)。

1.1 使用线程的常见方法

(1)使用runnable
 

Runnable r = new Runnable(){
  public void run(){
      //do something;
    }
};
Thread t = new Thread(r);
//启动新线程执行r的run方法,下面的方法将不堵塞当前程序的运行
//即r的run方法和当前主线程同时并发执行
t.start();//注意不是t.run()!

(2)使用继承Thread

public class MyThread extends Thread {
  public void run(){
      //do something;
    }
}

 

MyThread myThread = new MyThread();
myThread.start();

(3)采用匿名的Runnable或Thread的子类

略.

1.2 Thread 部分API概览

 

方法 描述与示例
void start

启动线程
t.start();

static Thread currentThread() 获得当前线程
StackTraceElement getStackTrace() 获得线程当前调用栈
void interrupt()

中断线程

注意,大多数情况该方法只能做个interrupt状态设置,并不能真正中断线程, 停止线程的安全的方法是让其在run方法中退出

  • 如果线程在wait,sleep,join方法上堵塞, interrupt状态被设置,并且对应方法将会接受到一个InterruptedException
  • 如果线程在interruptible channel上的I/O操作被堵塞, interrupt状态被设置,并且对应方法将会接受到一个ClosedByInterruptException.
  • 如果线程堵塞在Selector,线程对马上从selection操作返回(可能是个非0值),并且interrupt状态被设置
  • 如果不满者上面的任意条件,则 interrupt状态被设置。
  • 对于非活跃(active)的线程,此方法调用无效

public MyScoreCalTask extends Thread {
//计算所有人的得分的任务,能较即时响应用户界面的中止操作
public void run(){
 try{
  for(Person p: allPersons){
    if (Thread.interrupted()){
      throw new InterruptedException("任务被用户强行终止");
   }
   }
 }catch(InterruptedException e){
   //做些日志记录,比如log.warn(e);
 }
}
}

MyScoreCalTask t = new MyScoreCalTask();
t.start();

//界面某个“停止”按钮的处理函数
public void onCancleButtonClick(){
  t.interrupt();
}

static boolean interrupted 返回当前线程的interrupt状态,并将interrupt状态重置
int getPriority, setPriority 存取线程优先级,优先级越小的越有机会被cpu调度
String getName, setName 存取线程的名称,比较有利于debug
join 等待线程死亡,该方法会堵塞到超过给定的时间或者对应线程死亡为止
boolean setDaemon,getDaemon 是否为守候线程的设置,JVM在主线程执行完毕后,如果其他正在执行的线程均为守候线程,则JVM直接退出,否则等这些非守候线程完毕后在退出
static boolean holdsLock(Object) 当前线程是否拥有给定对象的monitor
static void setDefaultUncaughtExceptionHandler 设置当前线程缺省的“未被捕捉的异常”处理器,比如Runtime的异常并不强行要求程序处理,这种“未被捕捉的异常”的处理交给设置的处理器,否则采用系统缺省的处理器(一般简单e.printStackTrace(System.err))
void sleep 睡眠一段时间,该线程会交出cpu的执行权,但并不会释放其拥有的相关对象monitor

 




原创文章,如转载请注明:转载自金色坐标 [ http://www.kingxy.com/ ]

本文链接地址:http://www.kingxy.com/archives/188.html
  • quote 1.古月小树
  • http://www.sen0.com
  • 小树过来串门了,呵呵,前段时间南昌服务器在检查,所以博客有几天打不开了,对不住啦,特意过来道歉。现在可以正常访问了,老兄,我的链接好像没了,可方便加上?
  • 2009-12-29 8:52:53 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 通过Google订阅本站
  • 通过bloglines订阅本站
  • 通过抓虾订阅本站
  • 通过yahoo订阅本站

Search

Google

最新评论及回复

最近发表

金色坐标博客——京ICP备09009094号

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.
KingXY Blog - This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.