读书人

线程的一些学识

发布时间: 2013-10-08 17:02:59 作者: rapoo

线程的一些知识

线程是进程的一部分,进程是由多个线程组成,进程在执行的过程当中,是由操作系统把单位线程分配给具有空闲时间段的CPU,所以线程的执行非常依赖CPU的数量和速度,是完成多任务处理的关键。

线程的创建有两种方法:一是继承Thread类,二是实现Runable接口,当然Thread类也是实现了Runable接口,并且完成了常用的一些方法,而不用他创建者再次实现。执行线程时主要是执行run()方法,run()方法的调用需要有Thread.start()方法启动,所以线程启动运行时的顺序就是创建实例线程,然后调用start()方法进行初始化,一旦线程获得CPU时间段则调用run()方法,运行线程,如果没有调用start()方法,则run()方法则不能启动。

run()方法里一般会有一个循环,通常是无限循环,所以线程会一直执行下去,除非有外部命令使他不再满足于循环的条件。

通过sleep()方法可以使当前线程休眠,当然可以指定一个时间,在这个时间过去之后,线程就会进入start()状态,以便重新获取时间段进行执行.下图是线程的生命周期:线程的一些学识

运行中的线程如果遇到下面情况,它就会进入BLOCK状态,一个是sleep,另一个就是wait(),但它需要调用notify()方法进行唤醒,这样才能进入Runalbe就绪状态,所以线程有四个状态:创建,就绪,阻塞和死亡。线程也可以调用yield()方法来出让CPU供其它线程使用。

一个类可以通过实现Runable接口来创建线程,但是这个线程是没办法运行的,它只是创建了,没法进入线程队列,并运行run()方法。所以它必须作为参数来构造thread = new Thread(runnable)一个Thread实例,并通过thread.start()方法使runalbe进行就绪状态,并最终运行。

由于线程与CPU的关联很紧,所以在运行多个线程的时候,不同的运行时候,执行线程的顺序不一定是相同的。为了调整线程的执行顺序,尽可能按我们的需求执行,那么可以对线程进行优先级别的创建。设置最高优先级setPriority(Thread.MAX_PRIORITY);设置一般优先级setPriority(Thread.NORM_PRIORITY) ,这是默认的优先级。设置最低优先级setPriority(Thread.MIN_PRIORITY)。优先级别越高就可以得到最快的响应速度和响应时间 。

在执行的顺序过程中,也可以通过同步(sychronized)在资源抢夺最激烈的地方占用资源,使用同步之后,这个线程只有在执行完之后,才能所资源交给其它线程。实现线程同步的方法有四种:1、ThreadLocal;2、sychronized()同步方法和同步块3、wait()和notify();4、volatile,这里不再详细叙述。

另外,在进行图形界面的线程处理中,由于图形界面是对线程有独占性,所以要执行其它线程,可以用以下方法:

在*.widget.Display类中提供了两个方法可以间接的在非用户线程的进行图形构件的访问操作,这是通过的syncExec(Runnable)和asyncExec(Runnable)这两个方法去实现的。而方法syncExec()和asyncExec()的区别在于前者要在指定的线程执行结束后才返回,而后者则无论指定的线程是否执行都会立即返回到当前线程。

线程内容太多了,只写这么点吧!

读书人网 >编程

热点推荐