JAVA随笔——多线程的简介与实现
来源:互联网 发布:成套报价软件 编辑:程序博客网 时间:2024/04/30 00:36
又是新的一周,今天讲的是第十三章多线程,在OS里,进程是资源分配的最小单位,线程是cpu调度的最小单位,每个独立运行的程序称为一个进程(Process)。在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程。
多线程的优势:
1、提高界面程序的响应速度,可以将需要大量时间完成的流程在后台完成。
2、充分利用系统资源。
在实现线程编程时,首先需要让一个类具备多线程的能力(继承Thread类或实现Runnable接口的类具备多线程的能力),然后创建线程对象,调用对应的启动线程方法,既可实现多线程编程。
在实际实现线程时,JAVA提供了3种实现方式:1、继承Thread类;2、实现Runnable接口;3、使用了Timer和TimerTask组合。
1、继承Thread
创建: A extends Thread
在A中实现run()
启动:利用继承自Thread 的strart() 方法
A a = new A();
a.start();
一个类具备了多线程的能力以后,可以在程序中需要的位置启动线程,而不仅仅是在main方法内部启动。
2、实现Runnable接口
创建: A implements Runnable
在A中实现run()
启动: 以A的对象为Thread的构造函数的参数创建Thread对象
并且利用它的start()方法调度启动线程
A a = new A();
Thread b = new Thread(a);
b.start();
3、利用Timer和 TimerTask组合
创建:创建TimerTask的子类,并实现run()方法得到时钟器任务类
MyTimerTask extends TimerTask{
public void run(){
}
}
启动:创建时钟器Timer对象
利用时钟器对象的schedule()方法启动线程任务
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), ....,...);
在实际使用时,一个Timer可以启动任意多个TimerTask实现的线程,但是多个线程之间会存在阻塞。因此,如果多个线程之间需要完全独立运行,最好还是一个Timer启动一个TimerTask实现的线程。
Timer类中4个互为重载的schedule方法:
1、public void schedule(TimerTask task,Date time):该方法的作用是在到达time指定的时间或已经超过该时间时执行线程task。
Date d=new Date(2009-1900,10-1,1,10,0,0);
t.schedule(task,d); //在时间达到d或超过d(如2009年10月2号)时,启动线程task
2、Public void schedule(TimerTask task,Date firstTime,long period):该方法的作用是在时间到达firstTime时开始,每隔period毫秒就启动一次task指定的线程。这种方法会重复启动线程。
Date d=new Date(2009-1900,10-1,1,10,0,0);
t.schedule(task,d,20000); //当时间达到或超过d后每隔20000毫秒启动一次线程task
3、Public void schedule(TimerTask task,long delay):该方法和第一个方法类似,作用是在执行schedule方法delay毫秒后启动线程task。
T.schedule(tadk,1000); //在执行该行启动代码1000毫秒后启动一次线程task
4、Public void schedule(TimerTask task,long delay,long period):该方法和第二个方法类似。
- JAVA随笔——多线程的简介与实现
- java多线程—多线程的实现
- JAVA随笔——File类与热键的使用
- Java多线程随笔
- Java多线程基础随笔
- Java-多线程的实现与启动
- 多线程——Java多线程实现的三种方式
- 多线程——java实现多线程的方式
- java多线程—常用的两种实现多线程方式
- Java——多线程的实现方式
- Java多线程——并发容器简介
- 多线程——java线程池简介
- 多线程编程学习2——MFC与多线程简介
- 多线程经典案例——生产者/消费者问题的Java实现与详解
- 多线程——Java中继承Thread类与实现Runnable接口的区别
- JAVA随笔——Java复习与IO输入输出流
- JAVA随笔——线程的交互
- 随笔——java的比喻
- 性能优化——unix编程艺术学习笔记
- PrintWriter 和 Scanner实现文件读写
- 在排序数组中查找和为给定值的两个数字
- ipv6地址表示法
- 谈谈复杂度——unix编程艺术学习笔记
- JAVA随笔——多线程的简介与实现
- oracle warehouse builder 在ETL 中的数据质量控制
- 小东西
- linux下使用oracle和weblogic的一点经验
- 开博
- hdu 4006 The kth great number(使用优先队列)
- Wince .net ListView控件 闪烁的问题
- 如何处理输入函数留下的“垃圾”
- 答报情痴无别物——钱钟书与杨绛