如何正确地停止线程

更新中,敬请期待!

Java线程的生命周期

概要

目前CPU的运算速度已经达到了百亿次每秒,甚至更高的量级,家用电脑即使维持操作系统正常运行的进程也会有数十个,线程更是数以百计。

线程是CPU的调度和分派的基本单位,为了更充分地利用CPU资源以及提高生产率和高效地完成任务,在现实场景中一般都会采用多线程处理。

线程的生命周期

线程的生命周期大致可以分为下面五种状态:New(新建状态)、RUNABLE(就绪状态)、RUNNING(运行状态)、休眠状态DEAD(终止状态)

image-20190331203604063

查看更多

Java版-数据结构-链表

####概要

之前我们分别学习了解了动态数组、栈、队列,其实他们的底层都是依托静态数组来实现的、只是通过我们定义的resize方法来动态扩容解决固定容量的问题,那么我们即将学习的链表,它其实是一种真正的动态数据结构。

介绍

链表是一种最简单的动态数据结构,它能够辅助组成其它的数据结构,链表中的元素可存储在内存中的任何地方(不需要连续的内存,这一点和我们的数组具有很大的区别,数组需要连续的内存),链表中的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串接在一起

查看更多

Java版-数据结构-队列(循环队列)

前情回顾

在上一篇,笔者给大家介绍了数组队列,并且在文末提出了数组队列实现上的劣势,以及带来的性能问题(因为数组队列,在出队的时候,我们往往要将数组中的元素往前挪动一个位置,这个动作的时间复杂度O(n)级别),如果不清楚的小伙伴欢迎查看阅读。为了方便大家查阅,笔者在这里贴出相关的地址:

为了解决数组队列带来的问题,本篇给大家介绍一下循环队列

查看更多

Java版-数据结构-队列(数组队列)

前言

看过笔者前两篇介绍的Java版数据结构数组的盆友,都给予了笔者一致的好评,在这里笔者感谢大家的认可!!!

由于本章介绍的数据结构是队列,在队列的实现上会基于前面写的动态数组来实现,而队列又和不论是从特点上和操作上都有类似之处,所以在这里对这两种数据结构不了解的朋友,可以去看一下笔者前两篇文章介绍的数据结构数组,这里笔者把链接贴出来(看过的盆友可以跳过此步骤…)

Java版-数据结构-栈

介绍

栈是一种后进先出的线性表数据结构,分为栈顶和栈底两端,仅允许在表的一端插入元素,这一端被称为栈顶,另外一端称之为栈底。栈,只有两种操作,分为入栈(压栈)和出栈(退栈);向栈中添加元素的操作叫做入栈,相反从栈中删除元素叫做出栈。

特点

  • 只能从栈顶添加元素或者删除元素
  • 后进先出的数据结构,Last In First Out(LIFO)

查看更多

Java版-数据结构-数组

数组知识点回顾

声明Java数组时,会在内存中开辟一块连续指定大小的空间,用来存储固定大小的同类型元素

在java中定义个名为scores,长度为8,类型为int类型的数组如下:

1
2
3
public static void main(String[] args) {
int[] scores = new int[8];
}

查看更多

Java并发之原子性、有序性、可见性

原子性

​ 原子性指的是一个或者多个操作在 CPU 执行的过程中不被中断的特性

线程切换 带来的原子性问题

Java 并发程序都是基于多线程的,操作系统为了充分利用CPU的资源,将CPU分成若干个时间片,在多线程环境下,线程会被操作系统调度进行任务切换。

查看更多

awk命令使用详解

awk 命令

介绍

AWK是一种处理文本文件的语言,是一个强大的文本分析工具,之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法
  • 第一种形式
1
$ awk 'BEGIN{}pattern{commands}END{}' file
  • 第二种形式
1
$ standard output | 'BEGIN{}pattern{commands}END{}'

查看更多

sed命令

介绍

sed(Stream Editor) , 流编辑器。对标准输出或文件逐行处理

语法格式
  • 第一种形式
1
$ stdout | sed [option] "pattern command"
  • 第二种形式
1
$ sed [option] "pattern command" file

查看更多