文章目录

  • Java多线程
  • 引言
  • 线程的概念
  • 创建任务和线程


Java多线程

引言

Java的重要功能之一就是内部支持多线程–在一个程序中允许同时运行多个任务。在许多程序设计中语言中,多线程都是依赖于系统的过程或函数来实习的。接下来我们介绍线程的概念以及如何在java中开发多线程。

线程的概念

一个程序可能包含多个并发运行的任务。线程(thread)是指一个任务从头至尾的执行流。对java而言,可以在一个程序中并发的启动多个线程。这些线程可以在多处理器系统上同时运行,如下图:

java 多线程线程号 java多线程代码例子_java 多线程线程号


在单处理其系统中,多个线程共享CPU时间成为时间共享,操作系统负责调度及分配资源给他们。如下图

java 多线程线程号 java多线程代码例子_Java_02


多线程可以是程序反应更快、交互性更强、执行效率更高。在Java中,每个任务都是Runnable接口的一个实例,也可成为运行对象(runnable object)。线程本质上讲的就是便于任务执行的对象。

创建任务和线程

任务就是对象。为了创建任务,必须首先为任务定义一个类。任务类必须实现Runnale接口。Runnable接口非常简单,他只包含了一个run方法。需要实现这个方法来告诉线程应该怎样运行。

Java虚拟机通过调用任务的run()方法执行任务。下面的代码概括了创建一个任务、一个线程、
以及开始线程的主要步骤
//Custom task calss
public class TaskClass implements Runnable {
	public TaskClass() {}
	//Implemnets the run method in Runnable
	public void run() {
		//Tell system how to rn custom thread
	}
}
//Client class
public class Client {
	public void someMethod() {
		//Create an instance of TaskClass
		TaskClass task = new TaskClass();
		//Create a thread
		Thread thread = new Thread(task);
		//start a thread
		thread.start();
	}
}

下面,我们写一个小代码,测试一下。
需求:
1、打印字母 ”a“ 100次。
2、打印字母 ”1–100“ 的整数。
3、打印符号”#“ 100次。
如果运行这个程序,则三个线程将共享cpu。在控制台轮流打印字母a,数字,#。
下面上代码:

package test3;
/**
 * @author changxing.guo
 */
public class ThreadTaskDemo {
	public static void main(String[] a) {
		//create tasks
		Runnable printA = new PrintChar('a', 100);
		Runnable printNum = new PrintNum();
		Runnable printX = new PrintChar('#', 100);
		//create threads
		Thread threadA = new Thread(printA);
		Thread threadNum = new Thread(printNum);
		Thread threadX = new Thread(printX);
		//Start threads
		threadA.start();
		threadNum.start();
		threadX.start();
	}
	
}
//创建一个打印字母的任务类
class PrintChar implements Runnable {
	
	private char charToPrint;	//要打印的字母
	private int times;			//打印次数
	
	//构造函数
	public PrintChar() {};
	public PrintChar(char c, int n) {
		this.charToPrint = c;
		this.times = n;
	}
	//实现Runnable接口的run方法,里面添加自己要执行的逻辑
	@Override
	public void run() {
		for (int i=0; i<times; i++) {
			System.out.print(charToPrint);
		}
	}
}

//创建打印数字的任务类
class PrintNum implements Runnable {
	
	private int lastNum = 100;
	
	@Override
	public void run() {
		for (int i = 0; i <= lastNum; i ++) {
			System.out.print(" " + i);
		}
	}
}

该程序创建了三个任务,为了同时运行他们,创建三个线程。调用start()方法启动一个线程。当run()方法执行完毕,线程就终止。