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、线程范围内共享变量的概念与作用
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、线程范围内共享变量的概念与作用
相关文章推荐
- win8.1 java环境变量配置
- java基础多线程之共享数据
- java基础多线程之共享数据
- java基础多线程之共享数据
- Java中的&与&&运算符
- 阿里云部署Java web项目初体验(转)
- Ubuntu 13.10 Eclipse菜单栏失效
- Java的三大特性:封装 & 继承 & 多态
- 用AXIS2发布WebService的方法 使用eclipse插件生成服务端和客户端
- Atitit.java jar hell解决方案-----Djava.ext.dirs in ide envi..
- Atitit.java jar hell解决方案-----Djava.ext.dirs in ide envi..
- Atitit.java jar hell解决方案-----Djava.ext.dirs in ide envi..
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
- java工程师成神之路
- Java的学习笔记(二)
- Java的学习笔记
- 使用Java统计字母并且按照字母的次数排序
- Java线程池使用说明
- 三大框架开发时,spring配置文件出现异常