java——简单理解线程
一·【概念】
一般来说,我们把正在计算机中运行的程序叫做“进程”(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函数的顺序运行。用一张图来描写叙述此过程:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
最后再用几句话总结该过程:
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简单例子
1.线程 (1)理解,线程是系统分配处理器时间资源的基本单元也是系统调用的基本单位,简单理解就是一个或多个线程组成了一个进程,进程就像爸爸,线程就像儿子,有时候爸爸一个人干不了活就生了几个儿子干活,会 ...
- Java提高班(二)深入理解线程池ThreadPool
本文你将获得以下信息: 线程池源码解读 线程池执行流程分析 带返回值的线程池实现 延迟线程池实现 为了方便读者理解,本文会由浅入深,先从线程池的使用开始再延伸到源码解读和源码分析等高级内容,读者可根据 ...
- 【转】Java学习---深入理解线程池
[原文]https://www.toutiao.com/i6566022142666736131/ 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很 ...
- 并发王者课 - 青铜 2:峡谷笔记 - 简单认识Java中的线程
在前面的<兵分三路:如何创建多线程>文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感.在本篇文章中,我们将基于前面的示例代 ...
- 【转】关于Java的Daemon线程的理解
原文地址:http://www.cnblogs.com/ChrisWang/archive/2009/11/28/1612815.html 关于Java的Daemon线程的理解 网上对Java的Dae ...
- 【Android】线程池原理及Java简单实现
线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为: T1 创建线程时间 T2 在线程中 ...
- [译]线程生命周期-理解Java中的线程状态
线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...
- 【并发编程】一个最简单的Java程序有多少线程?
一个最简单的Java程序有多少线程? 通过下面程序可以计算出当前程序的线程总数. import java.lang.management.ManagementFactory; import java. ...
- Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。
java中,线程的状态使用一个枚举类型来描述的.这个枚举一共有6个值: NEW(新建).RUNNABLE(运行).BLOCKED(锁池).TIMED_WAITING(定时等待).WAITING(等待) ...
随机推荐
- 紫书 习题 10-3 UVa 1643(计算几何 叉乘)
直观感觉对角线重合的时候面积最大 然后可以根据方程和割补算出阴影部分的面积 注意知道两点坐标,可以求出与原点形成的三角形的面积 用叉乘,叉乘的几何意义以这两个向量为边的平行四边形的面积 所以用叉乘除以 ...
- Python安装selenium启动浏览器
1:在Python运行火狐或谷歌的浏览器是需要下载相对应的驱动 例如:你想在Python中使用代码命令打开firefox的网页 如果没有安装驱动,直接运行的话会出下面的错误 所以我们要安装相对应的浏览 ...
- HTML学习----------DAY1 第一节
什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...
- ImageLoader的简单分析(二)
在<ImageLoader的简单分析>这篇博客中对IImageLoader三大组件的创建过程以及三者之间的关系做了说明.同一时候文章的最后也简单的说明了一下ImageLoader是怎么通过 ...
- Android:管理应用内存
全部内容均来源于官方文档https://developer.android.com/training/articles/memory.html only way to completely relea ...
- MountService整理
刚毕业时第一个接触的模块就是Vold.这个模块尽管小,但深入下去是有一定难度的. 花了点时间又一次整理了下这一块的逻辑,也当温习下这个模块. watermark/2/text/aHR0cDovL2Js ...
- sp_executesql invalid object name
https://stackoverflow.com/questions/10417126/dynamically-named-temp-table-returns-invalid-object-nam ...
- 特性Attibute定义和使用
1.定义特性 [AttributeUsage(AttributeTargets.Class,AllowMultiple = false,Inherited = false)] public class ...
- 2015合肥网络赛 HDU 5492 Find a path 动归
HDU 5492 Find a path 题意:给你一个矩阵求一个路径使得 最小. 思路: 方法一:数据特别小,直接枚举权值和(n + m - 1) * aver,更新答案. 方法二:用f[i][j] ...
- JS的解析与执行过程—全局预处理阶段之命名冲突的处理策略
有如下代码: <body> <script> alert(f); function f() { console.log("fff"); } var f = ...