欢迎来到天天文库
浏览记录
ID:40238751
大小:545.50 KB
页数:31页
时间:2019-07-28
《Java程序设计基础与实践费雅洁 第10章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java程序设计基础与实践主编费雅洁中国水利水电出版社第10章多线程编程本章导读并发操作经常发生,例如,利用电脑听音乐时可以同时打印文档,Java提供多线程编程实现并发操作。多线程与并发处理是程序设计好坏优劣的重要标志。Java编写程序都运行在JVM中,在JVM内部,每用Java命令启动一个Java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,所有程序代码的运行都是以线程来运行。对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新
2、线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。但并发操作有时可能会出现问题,例如,老师修改学生成绩时,学生可能正在查询成绩,同一时间一个人往仓库中加货,另一个人从仓库中取货,这都是实际中经常发生的事情,如果控制不好就会出现学生查询到的成绩不是老师修改后的成绩,仓库中货物的总量统计不正确等问题,所以需要对并发操作进行控制。在Java程序中,JVM负责线程的调度。本章要点·Java线程类和接口·Java线程的创建方法·Java线程的生命周期·Java线程的优先权·Java线程的同步和死锁10.1基础知
3、识10.1.1什么是多线程?现在的操作系统是多任务操作系统,多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,显然,程序是死的、静态的,进程是活的、动态的。在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。在Windows中,CPU分配是以线程为单位的,一个进程可由多个线程组成。通过在一个程序进程内部同时执行多个线程,可以充分利用CPU等系统资源,从而最大限度的提高系统响应速度。对于操作系统而言,其调度单元是线程。一个进程至少包括一
4、个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。多线程编程是程序设计技术中的一个很重要的领域,目前多数主流的操作系统都支持多任务操作。多线程是进行大型复杂软件系统开发的一把利器。10.1.2Thread类和Runnable接口Java中编程实现多线程有两种方法,一是创建用户自己的线程子类,二是在用户自己的类中实现Runnable接口。无论哪种方法都需要使用Java基础类库中的Thread类及其方法。⑴Thread类Thread是Java的线程类,该类定
5、义了线程所有的基本操作。方法类型方法说明构造方法Thread()创建一个线程Thread(Stringname)创建一个名为name的线程Thread(Runnabletarget)创建一个线程,target称为被创建线程的目标对象,创建目标对象target的类负责实现Runable接口,给出改接口中run()方法的方法体Thread(Runnabletarget,Stringname)创建一个名为name的线程,创建目标对象target的类负责实现Runable接口Thread(ThreadGroupgroup,R
6、unnabletarget)创建一个属于Group线程组的线程,其他同上Thread(ThreadGroupgroup,Runnabletarget,Stringname)创建一个属于Group线程组的线程,其他同上Thread(ThreadGroupgroup,Stringname)创建一个属于Group线程组的线程,其他同上Thread(ThreadGroupgroup,Runnabletarget,Stringname)创建一个属于Group线程组的线程,其他同上成员方法staticThreadcurrentT
7、hread()返回当前正在执行的线程对象StringgetName()返回该线程的名称intgetPriority()返回线程的优先级voidsetPriority(intnewpriority)设置线程的优先级,JavaThread类有3个关于线程优先级的静态常量:Thread.MAX_PRIORITY、Thread.MIN_PRIORITY、Thread.NORM_PRIORITY。其中MIN_PRIORITY优先级最小,通常为1,MAX_PRIORITY优先级最大,通常为10,NORM_PRIORITY为普通优
8、先级,缺省值为5.voidinterrupt()中断线程booleanisAlive()返回线程是否处于活动状态booleanisInterrupted( );返回线程是否处于阻塞状态voidsetName(Stringname)设置线程名字staticvoidsleep(longmillsecond)使当前线程睡眠指定时间,millsecon
此文档下载收益归作者所有