java——简单理解线程
来源:互联网 发布:淘宝付了定金可以退吗 编辑:程序博客网 时间:2024/05/17 08:25
一·【概念】
一般来说,我们把正在计算机中执行的程序叫做“进程”(process),而不将其称为“程序”(program)。
所谓“线程”(thread),是“进程”中某个单一顺序的控制流。新兴的操作系统,如WindowsNT、Windows95等,大多采用多线程的概念,把线程视为基本执行单位。
用最普通的话定义线程,即:一个程序(进程)里边不同的执行路径,即线程。
二·【问题】
·引入线程,给我们带来了什么好处?
三 ·【实例分析】
(1)引入线程,给我们带来了什么好处?我们对比于没有引用线程,会怎么样?
(a)引用线程代码:
/*引用线程*///主方法main()public class TestThread { public static void main(String args[]) { Runner r = new Runner(); //下边两行代码是体现多线程同步执行的一个过程。必须声明thread。 Thread t = new Thread(r); t.start();//通过调用thread对象的start方式启动线程执行 for(int i=0;i<100;i++) { System.out.println("Main Thread:"+i); } }}//通过实现runnable接口实现多线程class Runner implements Runnable { public void run() { for(int i=0;i<100;i++) { System.out.println("Runner"+i); } }}
(b) 不引用线程代码:
/*不引用线程*///主方法main()public class TestThread { public static void main(String args[]) { Runner r = new Runner(); //差别在这句话 r.run();//直接调用runner对象的run方法,不引用thread线程 for(int i=0;i<100;i++) { System.out.println("Main Thread:"+i); } }}//通过实现runnable接口实现多线程class Runner implements Runnable { public void run() { for(int i=0;i<100;i++) { System.out.println("Runner"+i); } }}
对比执行结果:
<没有引入线程> <引用线程>
结果分析:
在没有引用线程时,它是顺着main函数执行。什么意思呢?就是说在main函数中,先把r.run()方法执行完毕后,在执行main函数剩下的部分;用一张图来描述此过程:
而在引入线程时,它是这样执行的:r.run()和main函数中的输出两个是同步执行:什么意思呢?就是说r.run()方法的执行不影响main函数的顺序执行。用一张图来描述此过程:
最后再用几句话总结该过程:
1·程序启动时会有一个由主方法(public static void main(){})所定义的线程。
2·通过实现Runnable接口的实例来实现多线程。
3·通过创建Thread实例来创建新的线程。
解释:在java中有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时腹泻了本类中的run()方法就可以实现多线程操作了,但由于在java中一个类只能继承一个父类,所以,实际中多用实现Runnable接口来实现多线程。
4·每个线程都是通过某个特定的thread对象对应的方法run()来完成操作。(方法run()成为线程体)
5·通过调用thread类的start()方法来启动一个线程。
【4·抛砖引玉】
以上实例只是简单的解析引入线程同步给我们带来了什么方便之处?通过代码的实现,显然看出,其提高了cpu的处理速度。其实这些问题我们在课本上都明白,但具体在代码中是怎么实现的?我们需要实践一番。包括以下几个问题,如何用代码实现,我们应该怎么做呢?
1·当两个线程同时对一个资源操作,可能会给我们带来什么问题?
2·我们该怎么避免第2个问题呢?
3·如果使用锁的方式不当,会带来什么问题?
- java——简单理解线程
- Java之线程安全的简单理解
- Java线程池ThreadPoolExecutor的简单理解
- java复习之多线程的简单理解
- 【Java笔记】——如何理解线程
- 深入理解java线程池—ThreadPoolExecutor
- 深入理解java线程池—ThreadPoolExecutor
- 深入理解java线程池—ThreadPoolExecutor
- 深入理解java线程池—ThreadPoolExecutor
- 深入理解java线程池—ThreadPoolExecutor
- Java—传统线程简单使用
- Java—线程池的简单使用
- java线程使用示例——最简单的线程
- 简单的线程理解
- 线程简单理解
- 简单的线程理解
- Java基础——深入理解Java线程池
- 深入理解java虚拟机—java内存模型与线程
- C++下caffe使用教程
- Oracle钱夹的使用
- 全文检索Lucene
- 提高entity framework 性能,要注意哪些事情
- IOS-http状态码
- java——简单理解线程
- 处理隐藏导航栏底部的横线首先要明白苹果导航栏底部横线用的是UIImageView
- git 使用教程
- 笔记
- 【HDU】 1010 Tempter of the Bone
- 互联网家装模式思考
- iOS开发Modal页面跳转动画效果
- (转)最优雅退出 Android 应用程序的 6 种方式
- 项目管理五大过程组及其详细解释