在了解线程时,先得对进程、线程、程序做一些简单的介绍:
进程:
进程是指运行中的应用程序,每个进程都有自己的独立地址空间(内存空间),在多任务系统中,每个独立执行的程序就称为进程,进程是程序的一次运行活动,是动态的概念
线程:
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源
【简单的讲:线程是进程的实体,一个进程可能有一个或多个线程,一个线程是一个程序中的一条执行线索】
程序:
程序一组有序的指令集合,是静态的概念
程序与进程
进程是执行程序的动态过程,而程序是进程运行的静态文本(如果我们把一部电影的拷贝比拟成一个程序,,那么电影的一次播放过程就可比为一个进程)
进程与线程
线程是进程的实体,一个进程可能有一个或多个线程,一个线程是一个程序中的一条执行线索
线程的实现有两种方式
- 继承Thread类
- 实现Runable接口
1.继承Thread类
public class MyThread extends Thread {
@SuppressWarnings("static-access")
public void run() {
// 该程序可以每隔1秒在控制台输出“执行第×次”。当输出5次后,自动退出
int i=0;
while(i<=5) {
Thread.currentThread().getName(); // 获取当前线程的名字
System.out.println("执行第"+i+"次"+Thread.currentThread().getName());
i++;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Test_MyThread {
public static void main(String[] args) {
MyThread t1= new MyThread();
t1.start();
MyThread t2 = new MyThread();
t2.start();
}
}
2.实现Runable接口
public class MyRunAble implements Runnable{
public void run() {
// 该程序可以每隔1秒在控制台输出“执行第×次”。当输出5次后,自动退出
int i=0;
while(i<=5) {
Thread.currentThread().getName(); // 获取当前线程的名字
System.out.println("执行第"+i+"次"+Thread.currentThread().getName());
i++;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Test_Runable {
public static void main(String[] args) {
MyRunAble mr = new MyRunAble();
Thread ta = new Thread(mr);
ta.start();
Thread ta1= new Thread(mr);
ta1.start();
}
}
继承Thread类与实现Runable接口的联系与区别
联系:
Runable接口和Thread类都要实现run方法,用star()启动线程
区别:
1.继承Thread类的线程对象拥有自己独立的资源,线程之间不能共享
2.实现Runable接口多个线程可以共享同一个资源,所以在需要多个线程共享同一个资源的时候,只能使用实现Runnable接口的形式
暂时先写这么多,以后有了更深的理解再来完善