首页 > 代码库 > Java的多线程

Java的多线程

 

    Java使用Thread代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用就是执行一段程序流(完成一定的任务)。

Java使用线程执行体来代表这段程序流。

 1. 继承Thread类创建线程类

package org.apache;public class ThreadDemo1 extends Thread {	private int i;	/*	 * 重写run方法,也就是线程执行体	 * 当线程类继承Thread类时,直接使用this即可取得当前线程	 * 直接调用getName()方法即可返回当前线程的名字	 */	public void run(){		for ( ; i<100;i++){			System.out.println(getName() + " " + i);		}	}		public static void main(String[] args) 	{		for (int i=0;i<100;i++){			System.out.println(Thread.currentThread().getName() 					+ " "+i);			if(i==20){				//创建并启动第一个线程				new ThreadDemo1().start();				//创建并启动第二个线程				new ThreadDemo1().start();			}		}	}}

  执行结果:

技术分享

注意:实际上该程序有三个线程,main()方法是主线程,显示的创建了两个子线程。

   Thread-0和Thread-1 i的值是不连续的,所以Thread-0和Thread-1不能共享Thread类的实例变量。

2. 实现Runnable接口创建线程类

package org.apache;public class ThreadDemo2 implements Runnable {	private int i;	//当实现Runnable接口时必须用Thread.currentThread().getName()获取当前线程	public void run() {		for ( ; i<100;i++){			System.out.println(Thread.currentThread().getName() + " " + i);		}	}	public static void main(String[] args) {		for (int i=0;i<100;i++){			System.out.println(Thread.currentThread().getName() + " "+i);			if (i==20){				ThreadDemo2 td = new ThreadDemo2();				//通过new Thread(target,name)方法创建线程				new Thread(td,"线程1").start();				new Thread(td,"线程2").start();			}		}	}}

  结果:

技术分享

i的值是连续的,共享同一个线程类的实例变量(其实是线程的target类)

Java的多线程