您的位置:首页 > 编程语言 > Java开发

java线程传统VS现代【1】

2016-03-13 13:12 369 查看
01、传统线程技术回顾

02、传统定时器技术回顾

03、传统线程互斥技术

04、传统线程同步通信技术

05、线程范围内共享变量的概念与作用

06、ThreadLocal类及应用技巧

07、多个线程之间共享数据的方式探讨

08、java5原子性操作类的应用

09、java5线程池

10、Callable与Future的应用

11、Lock&Condition实现线程同步通信

12、java5的Semaphere同步工具

13、java5的CyclicBarrier同步工具

14、java5的CountDownLatch同步工具

15、java5的Exchanger同步工具

16、java5阻塞队列的应用

17、java5同步集合类的应用



01、传统线程技术回顾

传统是相对于JDK1.5而言的。

1.创建Thread的子类,覆盖其中的run方法,运行这个子类的start方法即可开启线程

Thread thread = new Thread()

{

public void run()

{}

}};

thread.start();

2.创建Thread时传递一个实现Runnable接口的对象实例

Thread thread = new Thread(new Runnable()

{

public void run()

{}

});

thread.start();

3.问题:下边的线程运行的是Thread子类中的方法还是实现Runnable接口类的方法

new Thread(

new Runnable()

{

public void run()

{}

}){

public void run(){}

}.start();

分析:new Thread(Runnable.run()){run()}.start();

子类run方法实际就是覆盖父类中的run方法,如果覆盖了就用子类的run方法,不会再找Runnable中的run方法了,所以运行的是子类中的run方法

4.总结:

由Thread类中的run方法源代码中看出,两种传统创建线程的方式都是在调用Thread对象的run方法,如果Thread对象的run方法没有被覆盖,并且像上边的问题那样为Thread对象传递了一个Runnable对象,就会调用Runnable对象的run方法。

多线程并不一定会提高程序的运行效率。举例:一个人同时在三张桌子做馒头

多线程下载:并不是自己电脑快了,而是抢到更多服务器资源。例:服务器为一个客户分配一个20K的线程下载,你用多个线程,服务器以为是多个用户就分配了多个20K的资源给你。

02、传统定时器技术回顾



传统定时器的创建:直接使用定时器类Timer

a、过多长时间后炸

new Timer().schedule(TimerTask定时任务, Date time定的时间);

b、过多长时间后炸,以后每隔多少时间再炸

new Timer().schedule(TimerTask定时任务, Long延迟(第一次执行)时间, Long间隔时间);

TimerTask与Runnable类似,有一个run方法

Timer是定时器对象,到时间后会触发炸弹(TimerTask)对象

示例:

new Timer().schedule(

new TimerTask()定时执行的任务

{

public void run()

{}

} ……

);

定时器还可以设置具体时间,如某年某月某日某时……可以设置周一到周五做某事,自己设置的话需要换算日期时间,可以使用开源工具quartz来完成。

03、传统线程互斥技术



利用synchronized关键字处理,略。

04、传统线程同步通信技术



利用wait,notify,notifyall处理,略。

05、线程范围内共享变量的概念与作用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: