Java 线程基础
来源:互联网 发布:盘古软件源 编辑:程序博客网 时间:2024/05/16 11:23
一.Java中实现多线程
A.继承Thead类,重写run方法;
B.实现接口Runnable;
二.线程的六种状态
1.新生(new):
当用new操作符创建一个新的线程,尚未执行(start方法尚未被调用)。
2.可运行(runnable):
一旦调用start方法,线程处于runnable状态;
线程的运行取决操作系统给线程提供可运行的时间;
在任何给定时刻,一个可运行的线程可能正在运行也可能没有运行。
3.被阻塞(blocked):
当一个线程试图获取一个内部的对象锁,而该锁被其他线程持有,则该线程进入阻塞状态。
当所有其他线程释放该锁,且线程调度器允许本线程持有它时,该线程变成非阻塞状态。
4.等待(waiting):
当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。
4.计时等待(timed waiting):
有几个方法有一个超时参数。调用它们导致线程进入计时等待状态。
这一状态将一直保持到超时期满或者接收到适当的通知。
带有超时参数的方法有Thread.sleep和Object.wait, Thread.join, Lock.tryLock以及Condition.await的计时版。
5.被终止(terminated):
正常情况下run方法返回使得线程死亡。
因为一个没有捕获的异常终止了run方法而意外死亡。
调用 stop方法杀死一个线程,会抛出ThreadDeath错误对象。stop方法已过时。
三:线程的属性
1.线程优先级
每一个线程有一个优先级,默认继承父线程的优先级。
可通过调用getPriority和setPriority方法来存取设置线程的优先级。
线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。
线程优先级高度依赖于系统本身的线程实现机制,Windows有7个优先级别,Sun为Linux提供的
Java虚拟机,线程的优先级被忽略-所有线程具有相同优先级。
不要将程序的构建依赖于优先级。
2.守护线程
调用t.SetDaemon(true);将线程转换为守护线程(daemon thread)。
守护线程的唯一用途是为其他线程提供服务,如计时线程。
守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时刻甚至在一个操作的中间发生中断。
3.处理未捕获异常的处理器
不需要任何catch子句来处理可被传播的异常,在线程死亡前,异常被传递到一个用于未捕获异常的处理器。
该处理器必须属于一个实现Thread.UncaughtExceptionHandler接口的类,这个接口只有一个方法:
void uncaughtException(Thread t,Throwable e)。
可以用setUncaughtExceptionHandler方法为任何一个线程安装一个处理器。
也可以用setDefaultUncaughtExceptionHandler为所有线程安装一个默认的处理器。
4.线程组
所有线程都隶属于一个线程组。那可以是一个默认线程组,亦可是一个创建线程时明确指定的组。
在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。
每个应用都至少有一个线程从属于系统线程组。
若创建多个线程而不指定一个组,它们就会自动归属于系统线程组。
线程组也必须从属于其他线程组。
必须在构建器里指定新线程组从属于哪个线程组。
若在创建一个线程组的时候没有指定它的归属,则同样会自动成为系统线程组的一名属下。
因此,一个应用程序中的所有线程组最终都会将系统线程组作为自己的“父”。
线程组中的线程可以修改组内的其他线程,包括那些位于分层结构最深处的。
一个线程不能修改位于自己所在组或者下属组之外的任何线程。
定义一个线程组,通过以下代码可以实现。
ThreadGroup group = new ThreadGroup("group");
Thread thread=new Thread(group,"the first thread of group");
- 线程之一:JAVA线程基础
- 线程之一:JAVA线程基础
- java线程学习基础
- Java基础 -- 线程
- Java基础 -- 线程2
- JAVA线程基础
- Java 线程基础
- Java线程基础1
- java线程基础
- java基础 线程
- Java 线程基础
- java 线程基础
- 十三、Java线程基础
- java线程基础
- java基础之线程
- JAVA线程基础(一)
- Java基础之线程
- java基础--线程总结
- initrd 介绍
- c++结构体翻译为c#结构体
- more than one device and emulator
- 判断程序是否在运行
- 分辨率术语收集
- Java 线程基础
- IPSec
- 出门搞朋友
- jsp页面上取得的验证码的值与session中存入的值不同步的问题
- wscript.shell组件被禁用时 可以用Shell.Application执行命令
- 经典
- 程序员必须知道的,看看这些你知道么?
- 将mysql非分区表转换为分区表
- 浏览网页时不停出现400 Bad Request的解决办法