Java线程

1.线程简介

世间万物都可以同时完成很多工作,例如,人体可以同时进行呼吸.血液循环。思考问题等活动,用户既可以使用计算机听歌,也可以使用它打印文件,而这些活动完全可以同时进行,这种思想放在Java中被称为并发,而将并发完成的每一件事情称为线程。

在Java中,并发机制非常重要,但并不是所有的程序语言都支持线程。在以往的程序中,多以一个任务完成后再进行下一个项目的模式进行开发。

Java语言提供了并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其它线程并发执行,这种机制被称为多线程。

多线程是非常复杂的机制,比如同时阅读3本书,首先阅读第一本书第一章,然后再阅读第二本书第一章,再阅读第三本书第一章,回过头再阅读第一本书第二章,依此类推,就体现了多线程的复杂性。

其实Java中的多线程在Windows操作系统是多任务操作系统,它以进程为单位。一个进程是一个包含有自身地址的程序,每个独立执行的程序都称为进程,也就是正在执行的程序。系统可以分配给每个进程一段有限的使用CPU的时间(也可以称为CPU时间片),CPU在这段时间中执行某个进程,然后下一个时间片又跳至另一个进程中去执行。由于CPU转换较快,所以使得每个进程好像是同时执行一样。

一个线程则是进程中的执行流程,一个进程中可以同时包括多个线程,每个线程也可以得到一小段程序的执行时间,这样一个进程就可以具有多个并发执行的线程。在单线程中,程序代码按调用顺序依次往下执行,如果需要一个进程同时完成多段代码的操作,就需要产生多线程。


2.实现线程的两种方式

在Java中主要提供两种方式实现线程,分别为继承java.lang.Thread类与实现java.lang.Runnable接口。


(1)继承Thread类

Thread类是java.lang包中的一个类,从这个类中实例化的对象代表线程,程序员启动一个新线程需要建立Thread实例。Thread类中常用的两个构造方法如下:

public  Thread(String threadName)

public  Thread()

其中,第一个构造方法是创建一个名称为threadName的线程对象。

继承Thread类创建一个新的线程的语法如下:

public class ThreadTest extends Thread{}

完成线程真正功能的代码放在类的run()方法中,当一个类继承Thread类后,就可以在该类中覆盖run()方法,将实现该线程功能的代码写入run()方法中,然后同时调用Thread类中的start()方法执行线程,也就是调用run()方法。

Thread对象需要一个任务来执行,任务是指线程在启动时执行的工作,该工作的功能代码被写在run()方法中。run()方法必须使用一下语法格式:

public void run(){

}

注意:如果start()方法调用一个已经启动的线程,系统将抛出IllegalThreadStateException异常。


当执行一个线程程序时,就自动产生一个线程,主方法正是在这个线程上运行的。当不再启动其他线程时,该程序就为单线程程序,主方法线程启动由Java虚拟机负责,程序员负责启动自己线程

语法如下:

public static  void main(String[] args){

new ThreadTest().start();

}


下面看一个继承Thread类的实例。

在项目中创建ThreadTest类,该类继承Thread类方法创建线程。

public   class ThreadTest extends Thread{

private int count=10;

public void run(){

while(true){

System.out.print(count+" ");

if(--count==0){return;

                        }

             }

}

public static void main(String[] args){

new ThreadTest().start();

}

}


(2)实现Runnable接口

如果程序员需要继承其他类(非Theead类),而且还要使用当前类实现多线程,那么可以通过Runnable接口来实现。因为Java不支持多继承,这时该类就需要实现Runnable

接口使其具有使用线程的功能

实现Runnable接口的语法如下:

public class Thread extends Object implements Runnable

说明:实质上Thread类实现了Runnable接口,其中的run()方法正是对Runnable接口中的run()方法的具体实现

实现Runnable接口的程序会创建一个Thread对象,并将Runnable对象与Thread对象相关联。Thread类中有以下两个构造方法:

public Thread(Runnable r)。

public Thread(Runnable r,String name)。

这两个构造方法的参数中都存在Runnable实例,使用以上构造方法就可以将Runnable实例与Thread实例相关联。

使用Runnable接口启动新的线程的步骤如下:

(1)建立Runnable对象

(2)使用参数为Runnable对象的构造方法创建Thread实例

(3)调用start()方法启动线程。


下图表明了实现Runnable接口创建线程的流程:



例子如下:

public   class llx {
private int count=10;
public llx(){
Runnable b=new Runnable(){
public void run(){

while(true){

System.out.print(count+" ");

if(--count==0){return;

                        }

             }

 }
};
new Thread(b).start();
};
public static void main(String[] args){

new llx();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值