java之学习多线程(三)
2015-08-28 15:43
246 查看
线程的操作状态:
1、创建状态
在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,他被分配了相应的内存空间和其他资源,但还处于不可运行状态。新建一个线程对象可以采用Thread类的构造方法来实现,如 Thread thread = new Thread().
2、就绪状态
新建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,就进入了就绪状态。此刻,线程将进入线程队列排队,等待cpu服务,表明他已经具备运行条件。
3、运行状态
当就绪的线程被调用时,线程进入了运行状态。此时自动调用对象的run()方法。
4、堵塞状态
当在运行的线程被认为挂起或让出CPU暂时中断自己的执行,便进入堵塞状态。在可执行的情况下,调用 sleep()、suspend()、wait()等方法,线程将进入堵塞状态。堵塞时不会进入排队队列,只有消去堵塞的原因线程才会转为就绪状态。
5、终止状态
线程调用stop()或run()方法执行结束后,线程即处于终止状态。处于终止状态的线程不具有继续运行的能力。
(一)线程的命名和取得(public static Thread currentThread().取得当前线程对象)
线程的休眠是使其程序执行的慢一些。(public static void sleep(long millis)throws InterruptedException,设置休眠时间单位是毫秒)
(三)线程的优先级(设置高优先级只是表示该线程可能先执行而已。)
1、创建状态
在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,他被分配了相应的内存空间和其他资源,但还处于不可运行状态。新建一个线程对象可以采用Thread类的构造方法来实现,如 Thread thread = new Thread().
2、就绪状态
新建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,就进入了就绪状态。此刻,线程将进入线程队列排队,等待cpu服务,表明他已经具备运行条件。
3、运行状态
当就绪的线程被调用时,线程进入了运行状态。此时自动调用对象的run()方法。
4、堵塞状态
当在运行的线程被认为挂起或让出CPU暂时中断自己的执行,便进入堵塞状态。在可执行的情况下,调用 sleep()、suspend()、wait()等方法,线程将进入堵塞状态。堵塞时不会进入排队队列,只有消去堵塞的原因线程才会转为就绪状态。
5、终止状态
线程调用stop()或run()方法执行结束后,线程即处于终止状态。处于终止状态的线程不具有继续运行的能力。
(一)线程的命名和取得(public static Thread currentThread().取得当前线程对象)
public class gain_line_name { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub T_hread T = new T_hread(); new Thread(T).start(); //线程实例化 new Thread(T).start(); new Thread(T,"线程1").start(); new Thread(T,"县城2").start(); } } class T_hread implements Runnable{ @Override public void run(){ System.out.println(Thread.currentThread().getName()); //当前线程名称 } }
结果:Thread-0 线程1 Thread-1 县城2//当我们不给线程命名是系统默认命名 Tread_*****(二)线程的休眠
线程的休眠是使其程序执行的慢一些。(public static void sleep(long millis)throws InterruptedException,设置休眠时间单位是毫秒)
public class rest_line { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MyThread Me =new MyThread(); new Thread(Me,"line_1").start(); new Thread(Me,"line_2").start(); } } class MyThread implements Runnable { @Override public void run(){ for(int x = 0;x<10;x++){ try { Thread.sleep(100); //每次到这休眠100秒 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+",x="+x); } } }
(三)线程的优先级(设置高优先级只是表示该线程可能先执行而已。)
public class priority_line { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MyThread Me = new MyThread(); Thread T1 = new Thread(Me,"线程一"); Thread T2 = new Thread(Me,"线程二"); Thread T3 = new Thread(Me,"线程三"); T3.setPriority(Thread.MAX_PRIORITY); //设置最高优先级 T2.setPriority(Thread.MIN_PRIORITY); //设置低等优先级 T1.setPriority(Thread.NORM_PRIORITY); //设置中等优先级 T3.start(); T2.start(); T1.start(); } } class MyThread implements Runnable{ @Override public void run(){ for(int x = 0;x < 10;x++){ try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+",x="+ x ); } } }
、、、、、、、、、、、、、、、、、、、、、、、、、来试试输出主方法的优先级
public class TestDemo{
public static void main() throws Exception{
System.out.println(Thread.currentThread().getPriority());
}
}运行结果 5,表示中等优先级。10 高等 5 中等 1 低等
相关文章推荐
- Java – Reading a Large File Efficiently--转
- java多线程编程--如何终止一个线程
- SpringMVC之Controller传递JSON数据到页面
- 使用Spring Data JPA简化JPA开发
- Struts 2 Tutorial
- Struts DynaActionForm example
- java问题诊断
- java实现ping ip地址
- Spring定时任务
- java json
- eclipse中出现的错误
- Java笔记学习总结(四)
- Java的缓存机制
- mac下 Struts2 第一个程序的详细步骤(附带源码链接)
- Spring MVC 教程,快速入门,深入分析
- Java -verbose:gc命令
- axia2+spring配置实例
- java list add的弊病
- java 中类为啥要序列化
- 关于文本输入框获取光标位置以及指定位置插入内容