一、线程总述:

  线程是java当中一个重要的内容,如果想说线程的话,那我们应该先来讲一下什么是进程。

  进程:那么什么是进程呢,进程从字面上来理解就是,正在进行的程序。就比如说我们在windows当中打开任务管理器之后,我们看到的一个个程序一样。这个程序是在内存当中运行的,我们也可以说,进程就是对应在内存当中该程序所开辟的内存空间。在程序当中程序并不是负责程序执行的,实际上真正执行的是线程也叫做执行路径,从上往下执行,进程只是负责分配内存空间。

  线程:就是程序当中中,负责程序执行的控制单元,也叫做执行路径。一个进程当中可以有多个执行路径,称之为多线程。一个进程当中,至少要有一个线程。多线程的一个示例就是:360同时电脑扫描的时候,也在清理垃圾,也在扫描病毒。开启多个线程是为了同时执行部分。每个线程都有自己的运行内容,这个运行内容就是这个线程的任务。

  多线程的好处:解决了多个部分同时运行的问题。

  多线程的弊端:线程太多会导致效率过低。

  其实应用程序的执行都是在cpu上做着快速切换完成的,这个切换是随机的。

  线程的停止是由于JVM退出造成的,并不是由于主线程的退出而造成的。

  JVM启动的时候,就启动了多个线程,至少有两个由分析得:

  1、负责执行main函数的线程

     定义在main函数内----任务

  2、负责回收垃圾的线程

     在垃圾回收器当中进行的

 多线程示例一:垃圾回收器:

  

 class Demo extends Object
{ /**
*覆写了Object当中的finalize方法,来改变回收垃圾时索要执行的动作
*/
public void finalize()
{ System.out.println("Hello Finalize!"); } } class ThreadDemo1
{ public static void main(String[] args) { new Demo();
new Demo();
new Demo();
new Demo();
System.gc();//调用系统当中定义的gc方法来回收垃圾
new Demo();
new Demo();
new Demo();
System.out.println("Hello World!!!"); } }

但是输出的结果是两种的:

在程序运行的时候,当调用gc方法之后尽心了垃圾的回收清除,在回收垃圾的时候就调用了finalize这个方法。

为了避免大家误解,就是说必须main这个线程执行完了之后,才执行gc的线程,这里把代码来修改一下:

 class ThreadDemo1
{ public static void main(String[] args) { new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
for(int i = ; i<; i++){}
for(int i = ; i<; i++){}
for(int i = ; i<; i++){}
for(int i = ; i<; i++){}
for(int i = ; i<; i++){} System.gc();
new Demo();
new Demo();
new Demo();for(int i = ; i<; i++){}
System.out.println("Hello World!!!"); } }

这里的输出结果是:

这里我们可以看出来,在创建完对象之后,就开始回收垃圾了。并不是执行完main函数之后才执行gc()这个方法的.那么为什么会出现之前的那种状况呢,因为通知JVM启动回收线程也是需要时间的。在这个时间内就已经执行输出了 HelloWorld 了。

java学习之线程的更多相关文章

  1. Java学习笔记 线程池使用及详解

    有点笨,参考了好几篇大佬们写的文章才整理出来的笔记.... 字面意思上解释,线程池就是装有线程的池,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程 ...

  2. java学习之- 线程运行状态

    标签(空格分隔): 线程运行状态 线程的运行状态: 如下是是我编写的一个图,大家可以作为参考: 1.new一个thread子类也是创建了一个线程: 2.创建完毕之后start()-----运行, 3. ...

  3. java学习之线程池的实现

    package com.gh.threadpoor; import java.util.concurrent.ExecutorService; import java.util.concurrent. ...

  4. Java 学习笔记 线程控制

    题目一 本质上来说,线程是不可控制的,线程的执行是由CPU资源分配决定的,我们无法干预系统CPU的资源分配,但我们可以增加条件来让线程按照我们的预想顺序来执行. 比如.如果当前的执行的线程不满足我们所 ...

  5. java学习之- 线程继承Thread类

    标签(空格分隔): 线程 在java.lang包中有个Thread子类,大家可以自行查阅文档,及范例: 如何在自定义的代码中,自定义一个线程呢? 1.通过对api的查找,java已经提供了对线程这类事 ...

  6. Java学习:线程池

    线程池 线程池概念:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多的资源. 线程池:容器-->集合(ArrayList,Hash ...

  7. Java学习:线程的安全问题

    线程的安全问题 模拟卖票案例创建三个的线程,同时开启,对共享的票进行出售 public class RunnableImpl implementsc Runnable{ //定义一个多线程共享的票源 ...

  8. Java学习:线程实现方式

    线程实现方式 并发与并行 并发:指两或多个事件在同一个时间段内发生 并行:指两或多个事件在同一个时刻发生(同时发生) 进程的概念 内存:所有的应用程序都需要进入到内存中执行 临时存储RAM 硬盘:永久 ...

  9. java学习笔记 - 线程池(一)

    线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销 优点:(面试题)可重复使用已有线程,避免对象创建.消亡和过度切换的性能开 ...

随机推荐

  1. 在 APK 中找不到对应的 securityguard***.so 文件或者 so 文件载入出错

    1.解压查看你的apk是不是将so打进去了,如果没有打进入查看自己的jnilibs是否指定 2.查看手机是否是64的手机.因为百川的安全包没有64的支持,所以目前是以兼容包的形式给的包.如果第三方有6 ...

  2. Jquery基础整理

    1.简单的JQuery (1)  $(document).ready(function(){ $(document).ready(mydays); alert(“加载完毕,请检查!”); functi ...

  3. web服务器压力测试工具

    http_load 是运行在linux操作系统上的命令行测试工具, 用来对网站做压力测试. 下载地址:http://www.acme.com/software/http_load/http_load- ...

  4. 时间处理总结(一).net

    不断整理中... 获取当前时间DateTime.Now.ToString("d") ;//获取到的日期格式为eg :2013/11/14 时间格式只取年月日DateTime.Now ...

  5. IOS_视图实现圆角效果的三种方法及比较

    通过代码,至少有三种方法可以为视图加上圆角效果.附例子:https://github.com/weipin/RoundedCorner 方法一.layer.cornerRadius 第一种方法最简单, ...

  6. thinkphp 模板中赋值

    在项目开发的时候,有时候希望直接在模板中调用 一些自定义方法,或者内置方法来,处理获得一些数据,并且赋值给一个变量给后面调用,这个时候如果用原生Php 的方式调用如下:<?php $abc = ...

  7. Codevs 3233 古道

    3233 古道 时间限制: 1 s 空间限制: 8000 KB 题目等级:**白银 Silver** [传送门](http://codevs.cn/problem/3233/) 题目描述 Descri ...

  8. 百度UEditor(富文本编辑器)的基础用法

    百度的这个编辑器挺强大的,这里只是用他的文本功能,没有介绍上传图片视频的. 我用是的SSH来写的项目. 1. 把下载的UEditor(ueditor1_4_3_1-utf8-jsp)解压后全部复制到W ...

  9. 如何在WCF中集成unity

    第一种是代码方式: 点击打开链接http://blogs.microsoft.co.il/gadib/2010/11/30/wcf-and-unity-20/ 还有一种方式可以扩展成配置文件,有时间再 ...

  10. CentOS安装+配置+远程

    这篇博客我之前写在了csdn,转了过来,这篇是自己认为写的比较有技术含量的文章^_^ 最近和CentOS打了交到,其中遇到了很多问题,于是看了一些博客,解决了一些问题,但是都不是特别全面,所以想来一篇 ...