线程与第一个线程程序

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) throws InterruptedException {
		//创建一个Thread类数组
		Thread th[]=new Thread[3];
		//创建接口实现类对象
		ThreadRunnable t1=new ThreadRunnable();
		ThreadRunnable t2=new ThreadRunnable();
		ThreadRunnable t3=new ThreadRunnable();
		//实例化Thread数组
		th[0]=new Thread(t1,"线程1");
		th[1]=new Thread(t2,"线程2");
		th[2]=new Thread(t3,"线程3");
		//设置线程3为最大优先级
		th[2].setPriority(Thread.MAX_PRIORITY);
		//设置线程1为最小优先级
		th[0].setPriority(1);
		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+"次输出");
		
		}
		System.out.println(Thread.currentThread().getName()+"结束");
	}
}

运行截图:

 说明:由于设置了优先级,所以线程3最先结束,线程1最后结束(并不绝对)。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值