之间接触到的程序多是单线程,也就是一个程序在一个时间段内只能做一件事情,但是在现实中往往需要一个程序在同一时间段内做多件事情,比如在聊天同时还可以听歌或者下载。这就需要用到多线程。那什么是线程呢,它与进程又有什么不同呢,如何实现多线程呢,这就是今天多线程的第一课,在此小小总结。
进程可以理解为一个应用程序。一个进程可以包含多个线程,而这多个线程里的数据是共享的。因此可以说,线程是一个进程内多个并行的运行单位,同一个进程内的多个线程共享同一个内存。但运行多个进程时,内存分成多份且各个进程相互独立。
其中需要注意的几点是:
1、 进程是一个拥有资源的独立单位,可以拥有自己的资源。线程则不拥有自己的资源,只能访问进程的资源。同一个进程内的多个线程可以共享这个进程的资源。
2、 在创建一个进程时,系统会为它分配内存区域,而线程则不用,因为它使用的是进程的资源。
3、 在Java中可以把main()函数看做一个主线程,在运行时,如果主函数中还包含其他线程,则会交替执行主线程和其他线程。
关于实现多线程的方法,可以通过通过继承Thread类来实现,主要有以下三步:
1、创建一个子类来继承Thread 线程类。
2、重写父类中的public void run()方法。
3、调用start()方法(非阻塞方法)来启动线程。
下面是一个继承Thread类实现多线程的简单实例以及运行结果:
public class ThreadTest extends Thread{
public static void main(String[] args){
ThreadTest tt1 = new ThreadTest("张三");//创建线程
tt1.start();//启动线程
ThreadTest tt2 = new ThreadTest("李四");
tt2.start();
ThreadTest tt3 = new ThreadTest("王五");
tt3.start();
}
private String name;
public ThreadTest(String name){
this.name = name;
}
/**
* 重写run()方法,注意此方法中不可传参
* 可通过构造器传参
*/
public void run(){
study(name);
}
public void study(String name){
while(true){
System.out.println(name+"正在学习。。。");
}
}
}
<!--StartFragment -->
这里显示的只是运行结果的部分,但是可以看出三个线程并不是按照顺序依次执行完成的,而是分时多工来执行。
这是多线程的第一课,多线程还有其他什么特性,是否还有别的实现方法,这是后面会要总结的内容,期待下一课~~