java线程

来源:互联网 发布:知乎日报 登录 编辑:程序博客网 时间:2024/06/05 04:43

一.线程的概念以及目的

以前我们写过java程序各个部分是按顺序依次执行的,由于某种原因,需要将这些按顺序执行的“程序段”转成并发执行,每一个“程序段”是一个逻辑上相对完整的程序代码段,此时就是多线程。比如在生活中,我们可以一边听音乐,一边喝咖啡。再如一个网络服务器可能要同时处理几个客户机的请求等,多线程的主要目的就是将程序中的各个“程序段”并发化。

程序,进程,多任务与线程是非常容易混淆的概念,为了更好地理解多线程机制,有必要弄清楚这些概念。

程序{program)是含有指令和数据的文件,被存储在磁盘或者其他的数据存储设备中,也就是说程序是静态的代码。

进程(process)是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的,系统运行一个程序即是一个进程从创建、运行到消亡的过程。简单来说一个进程就是一个执行中的程序。每个进程之间是独立的,除非利用某些通信管道来进行通信,或是通过操作系统产生交互作用,否则基本上各进程不知道(不需要,也不应该知道)彼此的存在。就像在Windows操作系统里,执行了记事本程序后,又执行画图程序的话,系统中就会出现两个进程。

多任务(multi task)是指在一个系统中可以同时运行多个进程,即有多个独立运行的任务,每一个任务对应一个进程。

线程(thread)所谓线程,其实与进程相似,也是一个执行中的程序,但线程是一个比进程更小的执行单位,一个进程在其执行过程中可以产生多个线程,形成多条执行路径。但是与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资源,所以系统在产生一个线程忙活着在各个线程之间作切换的工作时,负担要比进程小的多,正因为如此,线程也被称为负担轻的进程。

多线程就是指同时执行一个以上的线程。

 

二.线程的状态与生命周期(目前还不是很理解,待钻研后回来补)

三.JavaThread线程类与Runnable接口

Java语言中实现多线程的方法有两种,一种是继承java.lang包中的Thread类,另一个是用户在定义自己的类中实现Runnable接口。但不管采用哪种方法,都要用到java语言类库中的Thread类以及相关的方法。

要在一个Thread的子类里激活线程,必须准备好下列两件事情:

(1)此类必须是继承自Thread类。

(2)线程所要执行的代码必须写在run()方法内

线程执行时,从它的ru()方法开始执行。run()方法是线程执行的起点,就像main()方法是应用程序的执行起点,init()方法是小程序的执行起点一样。所以必须通过定义run()方法来为线程提供代码。run()是定义在Thread类里的方法,因此把线程的程序代码编写在run()方法内,实际上所做的就是覆盖的操作。因此要使一个类可激活线程,必须使用下列的语法来编写。

class类名extends Thread

{

类里的成员变量;

类里的成员方法;

修饰符run(){

   线程的代码

  }

}

 

 

说明: run()方法规定了线程所要执行的任务,但一般不是直接调用run()方法,而是通过线程的start()方法来启动线程。

 

四.用线程制作运动小球实例



blob.png



然后我们自己定义一个类Balllistener去继承mouseadapter类,这里面有关于鼠标的很多方法可以供我们来自己编写所需的代码(其中ballconfig)是作者自己定义的一个接口


blob.png



我们在上图的代码中看到,在mousClicked的方法中,我们传入了一些参数创建了Ball类的对象,在创建之后,我们就调用了对象的start方法。

 

其中Ball类的定义见下图

 

blob.png

   以上就是在java程序编写的运动小球的部分代码了!在Android中,在子线程中直接修改组件的界面是会出错的,此时我们需要用到Handler类与Message类去发送和接受相应的信息。相应代码将在作者琢磨透彻后增加上来!  非常恳切读者能指出作者的不足!共同进步!

0 0
原创粉丝点击