Java线程相关(Thread和Runnable)
随便打开一个应用程序,即使这个程序很小,它也可能是由N多个线程所构成,在没有线程之前,我们用进程作为OS(操作系统)能够拥有资源和独立运行的基本单位。 我们要讨论的线程是比进程更小的,能够独立运行和拥有资源的基本单位。
说到线程,我们就得分析一下一个线程的各种状态,它大体上可以分为以下几种:
1 执行状态:线程获得了处理机正在运行。
2 阻塞状态:线程因为某种原因而暂停运行。
3 就绪状态:线程已经准备好运行,只要分配cpu就可以运行。
既然我们知道了线程能够拥有资源和独立运行的基本单位,那么对于N个线程需要对一个相同的资源进行访问的情况会遇到什么问题呢。让我们看看下面的代码:
- public class RunnableTest implements Runnable{
- private int a = 0;
- public void run() {
- while(a>-10){
- a--;
- System.out.println("a" + "的值为" + a);
- }
- }
- }
public class RunnableTest implements Runnable{ private int a = 0; public void run() { while(a>-10){ a--; System.out.println("a" + "的值为" + a); } } }
- public class ThreadTest extends Thread {
- private int a = 0;
- public void run() {
- while (a > -10) {
- a--;
- System.out.println("a" + "的值为" + a);
- }
- }
- }
public class ThreadTest extends Thread { private int a = 0; public void run() { while (a > -10) { a--; System.out.println("a" + "的值为" + a); } } }上面是实现多线程的两种方法,其中一种为继承Thread类,另一种为实现Runnable接口。但不论哪一种方法,进行下面的测试
- public class Test {
- public static void main(String[] args) {
- ThreadTest thread_0 = new ThreadTest();
- new Thread(thread_0).start();
- new Thread(thread_0).start();
- // RunnableTest rt = new RunnableTest();
- // new Thread(rt).start();
- // new Thread(rt).start();
- }
- }
public class Test { public static void main(String[] args) { ThreadTest thread_0 = new ThreadTest(); new Thread(thread_0).start(); new Thread(thread_0).start(); // RunnableTest rt = new RunnableTest(); // new Thread(rt).start(); // new Thread(rt).start(); } }多次运行可能会有一种下面状况。