java Thread类 线程学习 一:
2011-05-09 12:00
423 查看
欢迎技术交流。 QQ:138986722
线程中的7种非常重要的状态:(有的书上也认为只有前五种状态:而将"锁池"、"等待池"
都看成是"阻塞"状态的特殊情况:这种认识也是正确的,但是将"锁池"和"等待池"单独分
离出来有利于对程序的理解)
1、初始状态、线程创建、线程对象调用start()方法。
2、可运行状态、也就是等待Cpu资源、等待运行的状态。
3、运行状态、获得了Cpu资源,正在运行状态。
4、阻塞状态、也就是让出Cpu资源、进入一种等待状态、而不是可运行状态、有三种
情况会进入阻塞状态。
1)、如等待输入(输入设备进行处理、而Cpu不处理)、则放入阻塞、直到输入完毕、
阻塞结束后会进入可运行状态。
2)、线程休眠、线程对象调用sleep()方法、阻塞结束后会进入可运行状态。
3)、线程对象2调用线程对象1的join()方法、那么线程对象2进入阻塞状态、直到线
程对象1中止。
5、中止状态、也就是执行结束。
6、锁池状态。
7、等待队列。
线程的优先级:
线程的优先级代表该线程的重要程度、当有多个线程同时处于可执行状态并等待获得
CPU时间时、线程调度系统根据各个线程的优先级来决定给谁分配CPU时间、优先级高
的线程有更大的机会获得CPU时间、优先级滴的线程也不是没有机会、只是机会要小一
些罢了。
你可以调用Thread类的方法getPriority()和setPriorty来存取线程的优先级、线程的
优先级介于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间、缺省是5
(NORM_PRIORITY)。
直接继承Thread类:
实现Runnable接口创建线程:
线程中的7种非常重要的状态:(有的书上也认为只有前五种状态:而将"锁池"、"等待池"
都看成是"阻塞"状态的特殊情况:这种认识也是正确的,但是将"锁池"和"等待池"单独分
离出来有利于对程序的理解)
1、初始状态、线程创建、线程对象调用start()方法。
2、可运行状态、也就是等待Cpu资源、等待运行的状态。
3、运行状态、获得了Cpu资源,正在运行状态。
4、阻塞状态、也就是让出Cpu资源、进入一种等待状态、而不是可运行状态、有三种
情况会进入阻塞状态。
1)、如等待输入(输入设备进行处理、而Cpu不处理)、则放入阻塞、直到输入完毕、
阻塞结束后会进入可运行状态。
2)、线程休眠、线程对象调用sleep()方法、阻塞结束后会进入可运行状态。
3)、线程对象2调用线程对象1的join()方法、那么线程对象2进入阻塞状态、直到线
程对象1中止。
5、中止状态、也就是执行结束。
6、锁池状态。
7、等待队列。
线程的优先级:
线程的优先级代表该线程的重要程度、当有多个线程同时处于可执行状态并等待获得
CPU时间时、线程调度系统根据各个线程的优先级来决定给谁分配CPU时间、优先级高
的线程有更大的机会获得CPU时间、优先级滴的线程也不是没有机会、只是机会要小一
些罢了。
你可以调用Thread类的方法getPriority()和setPriorty来存取线程的优先级、线程的
优先级介于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间、缺省是5
(NORM_PRIORITY)。
直接继承Thread类:
package com.boxun.hzw.test; /** * 直接继承Thread类 * @author Administrator * */ public class TestTTT extends Thread { public int count = 1 ,number ; public TestTTT(int num){ number = num ; } /* * 必须覆盖Thread类的run方法 * Thread类提供我们的线程所要执行的代码、 * 为了指定我自己的代码、只需要覆盖它 * @see java.lang.Thread#run() */ public void run(){ while(true){ System.out.println("线程:"+number+"---计数:"+count++); /* * 这里可以运行++count == 双数(偶数2/4/6/8)看看会出现死循环 * 原因——System.out.println()中count++了一次、原本是1变为2、下面++count在让2变为3、 * 按照这个规律偶数永远不能被判断到、所以一直跑下去、 */ if(++count == 11) return ; } } /** * @param args */ public static void main(String[] args) { /* * start()方法 * 使该线程开始执行; * Java 虚拟机调用该线程的 run 方法。 * 结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。 * 多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。 * */ new TestTTT(1).start(); } }
实现Runnable接口创建线程:
package com.boxun.hzw.test; /** * Runnable接口: * 里面只有一个方法、run。 * * @author Administrator * */ public class ThreadTest implements Runnable { int count = 1 ,number ; public static void main(String[] args) { ThreadTest t = new ThreadTest(); for (int i = 0; i < 5; i++) { t.number = i +1 ; new Thread(t).start(); } } /* * 使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。 * @see java.lang.Runnable#run() */ public void run() { while (true) { System.out.println("线程:"+number +"计数:"+count++); if(count == 5){ count = 1 ; return ;} } } }
相关文章推荐
- java学习——ThreadLocal 线程局部 (thread-local) 变量的使用
- 【Java基础学习笔记】Thread+JLabel实现线程
- 学习笔记2:java中Thread类与线程的创建
- Thinking in Java学习笔记 Thread.UncaughtExceptionHandler接口实现捕获线程内异常
- Java并发学习笔记(13)线程之间的协作(Object.wait(),notifu(),notifyAll() Thread.join())
- Java——Thread线程基础知识学习
- java Thread类 线程学习 一
- Thread学习之Java中守护线程的总结
- javaThread学习(chapter1—线程的创建)
- JAVA学习笔记(三十七)- 创建继承Thread的线程
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
- java基础知识回顾之java Thread类学习(十二)-- 线程中断
- Java并发学习之线程状态及Thread常用方法详解
- java线程学习-Thread.currentTread().getName()和this.getName()的区别
- java多线程学习1-继承Thread类和实现Runnable接口来创建线程
- 【Java高并发学习】Thread线程相关
- java Thread学习(线程间协作)
- java线程学习-thread的一些方法