欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线程与第一个线程程序

程序员文章站 2022-06-21 11:28:27
...

1.线程的相关概念

首先得知道什么是进程什么是线程?

我的理解是进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的一个实例。

线程是进程的一个实体。

进程——资源分配的最小单位,线程——程序执行的最小单位。

线程与进程的区别:

1. 一个程序至少有一个进程,一个进程至少有一个线程

2. 线程的划分尺度小于进程,使得多线程程序的并发性高

3. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率

4. 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

5. 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配

2.线程创建的两种方法

在Java可以使用两种方法创建线程。第一种方式是通过创建Thread类构造子类,创建子类对象生成线程,另一种是构造一个实现Runnable接口的类,创建该类对象,用该类对象作为参数创建Thread对象生成线程。

2.1 Thread类

构造方法·:

public Thread(ThreadGroup group,Runnable target,String name);

group:指明该线程所属的线程组。

target:实际执行线程体的对象。

name:线程名字。

格式中的各项参数都可以为空。

常用方法:

(1)start():启动线程。

(2)run():线程体。

(3)sleep(int millsecond): 使线程睡眠millsecond毫秒。

(4)currentThread():获取当前线程。

(5)interrupt():中断线程。

创建线程的步骤:

  1. 创建一个Thread类的子类。
  2. 覆盖Thread类的run()方法。
  3. 创建所定义的子类的一个对象。
  4. 调用该对象的start()方法启用线程。

实例:使用Thread的子类创建线程。

package project;
public class ThreadCreate1 {
	public static void main(String args[]){
	//创建一个Thread类数组
	Thread th[]=new Thread[3];
	//使用子类实例化数组
	th[0]=new AnimalThread("线程1");
	th[1]=new AnimalThread("线程2");
	th[2]=new AnimalThread("线程3");
	th[0].start();
	th[1].start();
	th[2].start();
	}
}
//创建一个Thread类的子类
class AnimalThread extends Thread{
	//构造方法指定线程名字
	public AnimalThread(String name){
		super(name);//调用父类构造方法
	}
	//重写run()方法
	public void run(){
		for(int i=1;i<4;i++){
			//getName()方法返回线程名字
			System.out.println(getName()+"的第"+i+"次输出");
			try{
				//使线程睡眠50毫秒
				sleep(50);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
		System.out.println(getName()+"结束!");
	}
}

运行截图:

线程与第一个线程程序

 

说明:每次执行可能会产生不同的结果,因为代码没有准确的控制什么时候执行哪个线程。

2.2 Runnable 接口

1.Runnable接口的定义格式

java.lang中Runnable接口的定义如下:

public interface Runnable(){

 void run();

}

2. Runbable 接口创建线程的步骤

(1)定义一个实现Runnable接口的类·。

(2)实现接口中的的run()方法。

(3)创建所定义的子类的一个对象。

(4)调用该对象的start()方法启用线程。

实例:实现Runnable接口 创建线程。

package project;

public class ThreadCreate2 {

	public static void main(String[] args) {
		//创建一个Thread类数组
		Thread th[]=new Thread[3];
		//使用子类实例化数组
		th[0]=new AnimalThread("线程1");
		th[1]=new AnimalThread("线程2");
		th[2]=new AnimalThread("线程3");
		th[0].start();
		th[1].start();
		th[2].start();

	}

}
class ThreadRunnable implements Runnable{
	public void run(){
		for(int i=1;i<4;i++){
			//getName()方法返回线程名字
			System.out.println(Thread.currentThread().getName()+"的第"+i+"次输出");
			try{
				//使线程睡眠50毫秒
				Thread.currentThread();
				Thread.sleep(50);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
}

运行截图:

线程与第一个线程程序

 说明:也一样,每次执行可能会产生不同的结果,因为代码没有准确的控制什么时候执行哪个线程。

相关标签: Thread 线程