Java线程相关(Thread和Runnable)

 

随便打开一个应用程序,即使这个程序很小,它也可能是由N多个线程所构成,在没有线程之前,我们用进程作为OS(操作系统)能够拥有资源和独立运行的基本单位。 我们要讨论的线程是比进程更小的,能够独立运行和拥有资源的基本单位。

说到线程,我们就得分析一下一个线程的各种状态,它大体上可以分为以下几种:

1 执行状态:线程获得了处理机正在运行。

2 阻塞状态:线程因为某种原因而暂停运行。

3 就绪状态:线程已经准备好运行,只要分配cpu就可以运行。

既然我们知道了线程能够拥有资源和独立运行的基本单位,那么对于N个线程需要对一个相同的资源进行访问的情况会遇到什么问题呢。让我们看看下面的代码:

 

Java代码 java线程相关 _java java线程相关 _java_02
  1. public class RunnableTest implements Runnable{
  2. private int a = 0;
  3. public void run() {
  4. while(a>-10){
  5. a--;
  6. System.out.println("a" + "的值为" + a);
  7. }
  8. }
  9. }
Java代码 java线程相关 _java java线程相关 _java_02
  1. public class ThreadTest extends Thread {
  2. private int a = 0;
  3. public void run() {
  4. while (a > -10) {
  5. a--;
  6. System.out.println("a" + "的值为" + a);
  7. }
  8. }
  9. }
上面是实现多线程的两种方法,其中一种为继承Thread类,另一种为实现Runnable接口。但不论哪一种方法,进行下面的测试
Java代码 java线程相关 _java java线程相关 _java_02
  1. public class Test {
  2. public static void main(String[] args) {
  3. ThreadTest thread_0 = new ThreadTest();
  4. new Thread(thread_0).start();
  5. new Thread(thread_0).start();
  6. // RunnableTest rt = new RunnableTest();
  7. // new Thread(rt).start();
  8. // new Thread(rt).start();
  9. }
  10. }
多次运行可能会有一种下面状况。