JAVA学习第二十一课(多线程(一)) - (初步了解)
放假在家,歇了好几天了,也没学习,今天学习一下多线程。找找感觉。后天就要回学校了。sad。。。
PS:包 没有什么技术含量,会用就可以,日后开发就必需要会用啦,所以打算先放一放,先来多线程
一、多线程概述
什么是进程?
通俗的说。能够理解为正在进行中的程序,进程实际上是相应的一个应用程序在内存中所属空间。
进程不直接运行的,进程仅仅是分配该应用程序须要的内存空间。线程来负责运行,线程负责进程中内容运行的一个控制单元。也称之为运行路径。也称之为运行情景
什么是线程?
线程就是进程中一个负责程序运行的控制单元(运行路径)
一个进程中能够有多个运行路径。叫做多线程
比方说:360中电脑体检在跑的同一时候垃圾清理也在跑
一个进程其中,至少要有一个线程
开启多个线程是为了同一时候执行多个部分的代码
每个线程都有自己执行的内容。这个内容就能够称为线程要执行的任务
二、多线程的长处与弊端
看似多线程技术。高效,可是存在弊端。
Windows本身就是一个多任务同一时候执行的操作系统,比方Win在执行QQ和360,看似一边在聊QQ,360一边在扫描,他们是同一时候进行,实际上不是,CPU在负责程序的执行。在某一时刻,CPU正在控制QQ的执行。这时360就不会执行,CPU的切换速度很快。所以感觉他们是在同一时候执行,实际上在某一个时刻,仅仅有一个程序在执行,也就是仅仅有一个路径在执行,所以当应用程序开的比較多的时候,就会比較卡。单个程序获取CPU的执行频率就少(PS:CPU的切换是随机的。依赖于时间片)
优点:解决多部分同一时候执行的问题
弊端:线程太多,就会导致效率的减少
所以,多线程技术尽管能够解决多程序同一时候执行的问题,可是程序开多了就会效率低下。甚至死机
当然即便CPU非常强大,可是内存空间不足。相同做不到高速的切换动作
三、JVM中的多线程
虚拟机的启动。本身就依赖着多线程
JVM的启动就启动了多线程,至少有两个线程
1.运行main函数的线程(主线程)
该线程的任务代码都定义在main函数中
2.负责垃圾回收的线程(垃圾回收线程)
主线程在控制main的运行时,堆内存中存在多个垃圾,就会有还有一线程去控制回收垃圾。
举例|:堆内存会产生非常多对象,每一个对象都存在被回收的可能,每一个对象都不一样,有使用底层资源,有不是使用的,对象怎么被回收的仅仅有对象自己清楚,所以每一个对象都具备着能被回收的方法,那么每一个对象都具备的方法就定义在Objectt类中,叫finalize,作用:当垃圾回收器确定不存在对该对象的很多其它引用时,由对象的垃圾回收器调用此方法。
子类重写finalize 方法。以配置系统资源或运行其它清除。
class Demo extends Object
{
public void finalize()
{
System.out.println("Demo.finalize");
}
}
public class Main
{
public static void main(String[] args)
{
new Demo();
new Demo();
System.gc();//启动垃圾回收器
System.out.println("hello word");
}
}
PS:主线程运行到启动垃圾回收器时,垃圾回收线程启动,主线程会继续向下运行,所以先打印helloword,主线程结束,可是其它线程还在继续运行
四、主线程执行实例
对于堆内存并非一产生垃圾就会回收,由于那样会与主线程争夺CPU的运行权。所以在某一时刻谁拿到运行权,谁运行
主线程->aDemo.show()进栈->运行完出栈->bDemo.show()进栈->运行完出栈->return
假设是下述代码
class Demo
{
private String name;
public Demo(String name)
{
// TODO Auto-generated constructor stub
this.name = name;
}
public void show()
{
for(int i = 0;i<10;i++)
{
for(int j = -9999999;j<9999999;j++){}
System.out.println(name+"i = "+i);
}
}
}
public class Main
{
public static void main(String[] args)
{
Demo aDemo = new Demo("A");
Demo bDemo = new Demo("B");
aDemo.show();
bDemo.show();
System.out.println("hello word");
}
}
这样程序会及其慢,并且A不运行完B就无法运行,那么怎样实现A和B同一时候运行。那么就须要实现A在一个路径中,B在一个路径中,CPU进行切换。就能够实现A和B同一时候运行
就样就涉及到了多线程的创建。
JAVA学习第二十一课(多线程(一)) - (初步了解)的更多相关文章
- JAVA学习第二十七课(多线程(六))- 多生产者多消费者问题(JDK1.5新特性)
多生产者多消费者问题 以生产馒头 消费馒头为例. class Resource { private String name; private int count = 1; private boolea ...
- Python学习第二十一课——Mysql 对数据库的基本操作
数据库操作(DDL) 在数据库下创建表(create_table) 创建表代码块: CREATE TABLE employee( id TINYINT PRIMARY KEY auto_increme ...
- 风炫安全WEB安全学习第二十一节课 存储型XSS讲解
风炫安全WEB安全学习第二十一节课 存储型XSS讲解 存储型XSS演示 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存 ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十一周
java学习第十一周 本周,进行了java集合方面的知识,在博客园的帮助下,我的课前预习更有条理性,重点明确,本周的课堂反应明显更好了,首先,梳理一下本周知识点. Collection ...
- “全栈2019”Java异常第二十一章:finally不被执行的情况
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- NeHe OpenGL教程 第二十一课:线的游戏
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 风炫安全WEB安全学习第二十二节课 DOM型XSS讲解
风炫安全WEB安全学习第二十二节课 DOM型XSS讲解 Dom型XSS演示 通过Javascript,可以重构整个HTML文档,你可以添加.移除.改变或重排页面上的项目 要改变页面的某个东西,Java ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第二周
学习第二周(Java基本程序设计结构) 这一周,着重学习了Java的简单程序设计实现及运行,通过自己操作,发现Java的程序语法大面 ...
- 2017年1月1日 java学习第二天复习
今天是新年的第一天,以前学习没有总结习惯,学习效率和成果都很不好. 学习的过程就是反复的复习和不断学习的过程,开始今天的学习总结 学习java的第二天. 今天学习了java最基础的一些内容,照着 ...
随机推荐
- (转)淘淘商城系列——使用JsonView来格式化json字符串
http://blog.csdn.net/yerenyuan_pku/article/details/72846025 有时从服务端返回的json字符串往往晦涩难懂,就像下面这样,一行显示出来,让人非 ...
- POJ_1847_Tram
Tram Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11159 Accepted: 4089 Description ...
- 获取最新ADT下载地址的方法
最近网络不给力,谷歌上不去,想下个最新的ADT插件也难,于是寻找方法,最后找到一个不错的方法,问题解决过程如下(别嫌我啰嗦啊). 网上有人分享过下载ADT插件的页面地址:install-adt.htm ...
- UVA - 10603 Fill(BFS求最小值问题)
题目: 给出三个杯子(没有刻度线)的容量,起初之后第三个杯子是满的,其他的两个杯子是空的,容量分别是a.b.c.问最少需要倒多少升水才能让某一个杯子中的水有d升?如果不能恰好做到d升,就让某一个杯子里 ...
- MySQL异常:com.mysql.jdbc.PacketTooBigException: Packet for query is too large
### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024). You ...
- 转载:tomcat实现热部署的配置
tomcat实现热部署的配置 我们实现热部署后,自然就可以通过maven操作tomcat了,所以就需要maven取得操作tomcat的权限,现在这一步就是配置tomcat的可操作权限. 进入tom ...
- 三 , lnmp 一键包安装使用
安装打包环境 #https://lnmp.org/----------------------------------------------------#安装wget -c http://soft ...
- 【Codeforces 711C】Coloring Trees
[链接] 我是链接,点我呀:) [题意] 连续相同的数字分为一段 你可以改变其中0为1~m中的某个数字(改变成不同数字需要不同花费) 问你最后如果要求分成恰好k段的话,最少需要多少花费 [题解] dp ...
- noip模拟赛 水题
题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽分别是xi和yi.对于第二副牌的每张牌长和宽分别是aj和bj.第一副牌的第i张牌能覆盖第二副牌的第 ...
- noip模拟赛 whzzt-Conscience
分析:数据中并不存在无解的情况...... 每个摄像头都要覆盖尽可能多的点,按照y从小到大排序.对于每一列,只用判断第一个没有被观测到的就可以了,这个点必须要放摄像头,因为除了它自己没有其它的摄像头能 ...