线程基础—线程的创建

来源:互联网 发布:淘宝店铺装修教程pdf 编辑:程序博客网 时间:2024/05/23 14:22

从保定回来之后,听了小康讲的线程,发现我已经很久没有复习java基础了,对其中很多知识都有了陌生感。趁着空闲的两天看了一下线程的基础知识。

一 :程序、进程、线程的概念

程序(program)是为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象;

进程(process)是程序的一次执行过程,或是正在运行的一个程序。动态过程:有它自身的产生、存在和消亡的过程。

如:运行中的QQ,运行中的播放器,同时程序是静态的,进程是动态的。

线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。

若一个程序可同时执行多个线程,就是支持多线程的。

何时需要多线程?

程序需要同时执行两个或多个任务;

程序需要实现一些需要等待的任务时,如用户输入、文件读写操作等;

需要一些后台运行的程序时。

二:多线程的创建和使用

多线程的创建有两种方式:一种是继承,一种是实现。

1.继承Thread类

java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来实现。每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体。通过该Thread对象的start()方法来调用这个线程。

线程类

<span style="font-family:KaiTi_GB2312;">// 1.创建一个继承于Thread的子类class SubThread extends Thread{//2.重写Thread类的run()方法,方法内实现此子线程要完成的功能public void run(){for(int i=0;i <= 100;i++){System.out.println(Thread.currentThread().getName()+":"+i);}}}</span>
main()方法调用

<span style="font-family:KaiTi_GB2312;">public class TestThread {public static void main(String[] args){//3.创建一个子类的对象SubThread st1 =new SubThread();SubThread st2 =new SubThread();//4.调用线程的start();启动此线程;调用相应的run()方法//5.一个线程只能执行一次start()st1.start();st2.start();for(int i=0;i <= 100;i++){System.out.println(Thread.currentThread().getName()+":"+i);}}}</span>

2.实现Runnable接口

Thread类也是实现了Runnable接口,实现Runnable接口也需重写run方法。

线程类:

<span style="font-family:KaiTi_GB2312;"> class PrintNum1 implements Runnable{ // 1.实现接口的抽象方法public void run(){for(int i=1;i<=100;i++){if(i % 2 ==0){System.out.println(Thread.currentThread().getName() +":"+i);}}}}</span>
main()方法调用

<span style="font-family:KaiTi_GB2312;">调用的时候该类做参数传递即可 public class TestThread2{public static void main(String[] args){PrintNum1 p =new PrintNum1();//要想启动一个多线程,必须调用start()// 4.将此对象作为形参传递给Thread类的构造器中,创建Thread类的对象Thread t1 =new Thread(p);// 5.调用start()方法,启动线程并执行run()t1.start();// 启动线程,执行Thread对象生成时构造器形参的对象的run()方法}}</span>

通过两种方式可以看出第二种方式比第一种好。因为实现优于继承。通过实现Runnable接口,避免了java单继承的局限性,同时如果多个线程要操作同一份资源,此时更适合实现的方式。

而通过继承Thread类的方式,如果多个线程操作的话,需要实例化多个子类线程,而其共享的资源就会声明为static,会一直存在于内存。而实现Runnable接口的方式,实例化一个类,将其作为参数传递给不同的线程既可。

0 0
原创粉丝点击