首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java多线程编程学习与思忖

2012-10-28 
Java多线程编程学习与思考?? 因为工作关系,最近在猛看Java多线程编程的资料。以前因为做的是J2EE项目,也未

Java多线程编程学习与思考

?? 因为工作关系,最近在猛看Java多线程编程的资料。以前因为做的是J2EE项目,也未曾编写过多线程的东西,很多三、四年前初学Java的概念都忘记了。现在重新拾起。

?

?

???? Java多线程

?

???? Java线程运行的状态:

???? Java虚拟机将线程运行的过程分为四种状态:

???? New??????????? ----新生

???? Runnable??? ----可运行

???? Blocked?????? ----阻塞

???? Dead?????????? ----死亡

?

???? 注意:在很多操作系统中,线程的状态远不止这四种。

?

???? Java线程的创建:

???? 在Java中实现多线程是通过继承java.lang.Thread 类 和 实现 java.lang.Runnable接口实现的。

???? Runnable接口只有一个run()方法。

???? 继承自Thread类的子类必须覆盖Thread类的run()方法以实现自己的操作。

?

?

???? 线程的启动:

???? 通过调用Thread类的start()方法来启动一个线程,而不是通过run()方法。

???? run()方法是线程的执行体,所有的线程执行代码都在run()方法中实现。

?

???? 实现了Runnable接口的线程没有start()方法,它通过以下的方式来启动自己。

//实现Runnable接口的线程的启动方式 Runnable r = new RunnableImpl(); Thread thread= new Thread(r); thread.start();

?

?

?

??

?? 线程的优先级:

?? 线程的优先级与创建它的线程的优先级相同。

?? 通过如下方法可以设置线程的优先级:

?? //手动设置线程的优先级 public final void setPriority(int newPriority)

?? 注意:手动设置线程的优先级是个危险地操作。必须考虑具体的操作系统平台。因为操作系统对优先级的支持不同,在windows NT/XP 线程有7个优先级,而在很多Linux系统中却没有设置优先级调度策略。因此,Java为Linux提供的虚拟机在优先级上完全被忽略了。所有线程具有相同的优先级。

?

?

????线程的分类:

????Java线程分为两类:User Thread (用户线程)、Daemon Thread(守护线程)

?????? 下面的方法是用来设置守护线程的:

???????

//设置线程为守护线程 public final void setDaemon (boolean on);

?

?

?

??? 注意:setDaemon(boolean on) 方法必须在 start()方法之前设置,否则会抛出一个java.lang.IllegalThreadStateException 异常。

?????? 不能将一个正在运行的常规线程设置为守护线程。

?????? 守护线程中产生的线程也是守护线程。

?

??? Thread.sleep() 方法

??? 使当前线程阻塞一定时间将CPU时间让给其他线程,会释放锁,并重新到可运行状态(即Runnable状态),重新等待获得CPU时间以执行在sleep时未执行完的代码;

???

??? wait()方法

??? 使当前正在执行的线程阻塞,并释放锁,状态变为Blocked(阻塞状态);

?

??? interrupt()方法

??? 中断一个正在执行的线程,但只是将该正在执行的线程的中断标志位更改,该正在运行的线程是否会中断由它自己决定。也就是说有可能中断,也可能一直运行直到完毕。

??? 正在执行的线程可以通过Thread.currentThread().isInterrupted()方式来判断是否有线程试图中断自己的运行,以便决定是否进行处理。

?

????public static void yield()方法

???

???

?

???? 线程间通信:

???? 通过管道来实现。管道又分为命名管道和无名(或匿名)管道。命名管道可以方便的在两个独立进程之间实现通信;匿名管道是父子进程之间通信的一种方式。

???? Java多线程中的管道是通过Java提供的工具类来实现的。

????

???? Java多线程的管道工具类:

????? java.io.PipedInputStream;
???? ?java.io.PipedOutputStream;

热点排行