您的位置:首页 > 编程语言 > Java开发

Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用

2014-02-13 20:57 731 查看
多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流。进程是静态的概念,线程是动态的概念。 每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,线程可以看成时轻量级的进程,同一类线程贡献代码和数据空间,每个线程具有独立的运行栈和程序计数器,线程切换的开销小。

单线程

同时有且仅有一个程序在执行单线程实例1:
public class {
	public static void main(String[] args) {
		m1();
	}
	
	public static  void m1() {
		m2();
		m3();
	}
	
	public static void m2() {}
	public static void m3() {}
}
程序执行图:只有一条路径来执行,执行m1执行m2,等m2执行完再来执行m3最后回到了执行m1上。

多线程

是在操作系统中同时运行多个程序,在同一个应用程序中有多个顺序流同时执行,两种方法来实现多线程:

第一种是实现Runnable接口,然后实现其run方法

下面是通过实现Runnable接口实现多线程:
public class TestThread1 {
	public static void main(String args[]) {
		Runner1 r = new Runner1();
		r.start();
		//r.run();
		//Thread t = new Thread(r);
		//t.start();
		
		for(int i=0; i<100; i++) {
			System.out.println("Main Thread:------" + i);
		}
	}
}

//class Runner1 implements Runnable {
class Runner1 extends Thread {
	public void run() {
		for(int i=0; i<100; i++) {	
			System.out.println("Runner1 :" + i);
		}
	}
}
产生的结果执行图:

第二种方式是new出Thread,然后重写start方法;

public class TestThread2 {
	public static void main(String args[]) {
		Runner2 r = new Runner2();
		Thread t1 = new Thread(r);
		Thread t2 = new Thread(r);
		t1.start();
		t2.start();
	}
}

class Runner2 implements Runnable {
	public void run() {
		for(int i=0; i<30; i++) {	
			System.out.println("No. " + i);
		}
	}
}
结果图:

总结:两种生成线程对象的区别:

1.两种方法均需执行线程的start方法为线程分配必须的系统资源、调度线程运行并执行线程的run方法。 2.在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。3.java 是单根继承 实现多线程有两种实种方式一种是继承 thread 类 另一种就是实现Runnable接口 如果这个类还要继承其他的类的时候 这时候是不允许继承的。 此时就可以使用实现接口的方式,况且 Runnable接口中只有一个空的run()方法。4:Thread实现了Runnable,需要使用Runnable的地方可以直接使用thread;单独使用Runnable时要先把run方法实现了不能说使用那个更好,要看在什么地方使用最合适,要以实际情况而定!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: