Java - 多线程 - 创建线程

进程:   本质上是正在运行中的程序。

线程:   是进程中一个负责程序执行的控制单元(执行路径)。一个进程至少会有一个线程


一个进程有多个执行路径称之为多线程。开启多个线程是为了同时运行多部分代码。

每一个线程都有自己运行的内容,这些内容就是线程要执行的任务。

多线程决解了多部分代码同时运行的问题,但是太多的线程同时运行会导致程序的效率降低。


Java的多线程系统兼容单核和多核两种操作系统:

|--    在单核系统中 并发执行的线程 共享CPU,每一个线程得到一片CPU时间周期,所以在单核系统中多个线程不是真在同时运行的。

|--    在多核的系统中,多个线程有可能被同步执行。程序的效率更高,操作速度更快。


Java 的 Thread 类:

|--    Java的多线程系统基于Thread 类,它封装了线程的执行。Thread  类的实例就是线程的代理。


Java主线程:

Java程序启动时,开始运行的线程,称为主线程。

|--   其他的子线程都是从主线程产生的

|--   通常,主线程是最后结束执行的线程,因为他要关闭各种动作。

|--   主线程默认是main,5,main

/**分析下面代码**/

class CurrentThreadDemo 
{
	public static void main(String[] args) 
	{
		Thread t = Thread.currentThread();//返回当前线程的引用
		System.out.println("当前正在运行的线程是" + t);//当前正在运行的线程是Thread[main,5,main]
		t.setName("abc");
		System.out.println("把线程名称改成" + t);//把线程名称改成Thread[abc,5,main]
		try{//因为sleep()可能抛出InterruptedException异常所以要被监视
			for(int i=0;i<=5;i++){
				System.out.println(i);
				t.sleep(100);//在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
			}
		}catch(InterruptedException e){			
			System.out.println("当前线程被中断");
		}
	}
}
/**[main,5,main]分别表示线程的名称、优先级、线程所属线程组的名称**/


Java创建线程的两种方法:

|--   第一种方式:   实现 Runnable 接口

/*
新建一个子线程和主线程一起运行

    主线程要实现的任务打印6-10
    通过实现 Runnable 接口的 run() 封装子线程要实现的任务
    子线程要实现的任务是打印1-5
    我们希望在任务对象创建的时候就开始一个新的线程
    那么就要在构造函数中创建新的 Thread 对象。并运行线程。

*/

class NewThread implements Runnable
{
	private Thread t;
	NewThread(){
		t = new Thread(this);
		System.out.println("新建一个子线程:"+t);
		t.start();
	}
	public void run(){//新进程要实现的任务
		try{
			for(int i=1;i<=5;i++){
				System.out.println(i +"---"+ t.getName());
				t.sleep(100);
			}
		}catch(InterruptedException e){
			System.out.println("子线程被中断");
		}
		System.out.println(t.getName() + "子线程退出");
	}
}
class ThreadDemo
{
	public static void main(String[] args) 
	{
		new NewThread();
		new NewThread();
		Thread t = Thread.currentThread();
		try{
			for(int i=6;i<=10;i++){
				System.out.println(i);
				t.sleep(100);
			}
		}catch(InterruptedException e){
			System.out.println("主线程被中断");
		}
		System.out.println("主线程退出");
	}
}

|--   第二种方式:    扩展 Thread 类

/**

通过继承 Thread 类创建子线程

**/

class NewThread extends Thread
{
	NewThread(){
		super("pan");
		System.out.println("新建一个子线程:"+this);
	}
	public void run(){//新进程要实现的任务
		try{
			for(int i=1;i<=5;i++){
				System.out.println(i +"---"+ this.getName());
				sleep(100);//继承Thread就拥有了它里面的方法,可以直接使用
			}
		}catch(InterruptedException e){
			System.out.println("子线程被中断");
		}
		System.out.println(this.getName() + "子线程退出");
	}
}
class ThreadDemo
{
	public static void main(String[] args) 
	{
		NewThread n = new NewThread();
		n.start();
		Thread t = Thread.currentThread();
		try{
			for(int i=6;i<=10;i++){
				System.out.println(i);
				t.sleep(200);
			}
		}catch(InterruptedException e){
			System.out.println("主线程被中断");
		}
		System.out.println("主线程退出");
	}
}

如果不重写 Thread 的其他方法,创建线程的最好方法是实现Runnable接口,通过实现Runnable接口不需要继承Thread 可以自由的继承其他类。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章