一、进程与线程的概念
1.进程:进程是并发执行的程序在执行的过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
2.线程:线程是进程的一个执行单元,是比进程小的独立运行单位。
一个程序至少一个进程,一个进程至少一个线程。
二、线程
线程之间可以实现共享数据
1.创建并启动线程
(1)方式一:继承Thread类
这里的Thread类用来管理线程,里面定义了一些具体操作线程的方法。
步骤:
a.定义一个类Th让它继承Thread类
b.在类Th里面覆盖Thread类中的run方法;
c.在run方法里面编写线程执行体
d.在main方法里面通过new创建线程对象,再调用Thread类里面的start方法,来启动线程(注意这里不能使用run方法,因为run方法不能分时执行)
创建线程类:Th类 a = new Th类();
调用线程对象的start方法:a.start();启动一个线程
代码实现
package edu.xalead;
class Th extends Thread{
private Integer i = null;
public Th(Integer i){
this.i = i;
}
public void run(){
for(;;){
System.out.println(i++);
}
}
}
public class 线程示例1 {
//线程一定是由主线程启动的
public static void main(String[] args) {
Integer i = 0 ;//共享数据
Th t = new Th(i);//创建线程
Th t1 = new Th(i);
// t.run();//这里不能使用run方法来执行,因为run无法实现分时的功能
t.start();
t1.start();
}
}
(2)方式二:实现Runnable接口
由于Java不支持多继承,即继承类某一个类就不支持继承其他类了,因此引入Runnable接口
class Th1 implements Runnable{//Th1为线程类
private Integer i = null;
public Th1(Integer i){
this.i = i;
}
public void run(){
for(;;){
System.out.println(i++);
}
}
}
public class 线程示例2 {
//线程一定是由主线程启动的
public static void main(String[] args) {
Integer i = 0 ;//共享数据
Th1 t = new Th1(i);//创建线程
Th1 t1 = new Th1(i);
Thread tt = new Thread(t);//线程类持有任务类的引用t来对线程进行操作
Thread tt1 = new Thread(t1);
tt.start();
tt1.start();
}
}