第一章 java多线程技能

1 线程:进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理顺序时发生的活动;是程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位。

而线程是进程中独立运行的子任务。

打印当前线程名:System.out.println(Thread.currentThread().getName());

2 实现多线程编程

有两种方式,一是继承Thread,二是实现Runnable,运行起来具有随机性。

1.实现接口:

public class MyRunnable implements Runnable{

@Override

public void run() {

// TODO Auto-generated method stub

}

}

实现运行:

Runnable runnable = new MyRunnable();

Thread thread = new Thread(runnable);

thread.start();

2.继承Thread:

public class MyThread extends Thread{

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

}

}

实现运行:

MyThread myThread = new MyThread();

myThread.start();

非线程安全:指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被修改,值不同步的情况。

3 线程方法集合

1. currentThread()方法返回当前正在执行的线程名称;

System.out.println(Thread.currentThread().getName());

2. isAlive()的功能是判断当前的线程是否还处于存活状态,活动状态,要求线程还在准备运行的状态或者正在执行(已经启动且尚未终止);

3. sleep()方法是指定毫秒数内让当前正在执行的线程休眠;(Thread.sleep())

4. getId()取得线程的唯一标识;返回long

4 停止线程

1. 停止一个线程可以使用Thread.stop()方法,但最好不要使用,因为不安全。

2. 大多数停止一个线程的操作使用Thread.interrupt()方法,但这个方法不会终止一个正在运行

的线程,还需要加入一个判断才可以完成线程的停止,判断线程是否停止:

1.this.interrupted()测试当前线程是否已经中断。

2.this.isInterrupted()测试线程是否已经中断。

关于interrupt()方法,它会将一个标志为设置为true,这个时候用interrupted()会返回true:

Thread.currentThread().interrupt();

if (isInterrupted()) {

break;

//或者throw new InterruptedException();

}

这个一般使用isInterrupted,因为使用interrupted会把标志位修改设反。

在java中有以下三种方法可以终止正在运行的线程:

(1)使用退出标志,使线程正常退出,也就是当run方法完成之后线程退出;

(2)使用stop方法强行退出,但是不推荐使用这个方法,因为stop和suspend及resume

一样,都是过期作废的方法,使用它们可能会产生不可预料的结果;

(3)使用interrupt方法中断线程

5 暂停线程

使用suspend方法暂停线程,使用resume方法恢复线程的执行。

缺点当使用不当,极容易造成公共的同步对象的独占,使得其他的线程无法访问公共对象。

还有也会造成数据不同步。

注意点

当程序运行到println()内部的时候,同步锁还没有释放。

6 yield方法

放弃当前的cpu资源,将它给其他的任务去占用cpu执行时间,但放弃的时间不确定,有可能刚刚放弃,马上又获得了cpu时间片。

7. 线程的优先级

线程可以划分优先级,优先级高的线程得到的cpu资源比较多,是cpu优先执行优先级高的线程

设置优先级使用setPriority(),1-10等级,如果超过这个范围的话会抛出throw new IllegalArgumentException()。

jdk预设的优先级的值

public final static int MIN_PRIORITY = 1;

public final static int NORM_PRIORTT = 5;

public final static int MAX_PRIORTY = 10;

线程的优先级具有继承性,比如A线程启动B线程,则B线程的优先级与A是一样的。

优先级是设置了,但是不一定最高的就一直在执行,因为它还是随机的。

8 守护线程

java里有两种线程,一个是用户线程,一个是守护线程。

守护线程是陪伴,但进程中不存在非守护线程的时候才会自动撤销,典型的守护线程时垃圾回收线程。典型的应用是GC(垃圾回收器)。

thead.setDeamon(true)

第一章 java基本多线程技能的更多相关文章

  1. “全栈2019”Java多线程第一章:认识多线程

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  2. 第一章 Java的I/O演进之路

    I/O基础入门 Java的I/O演进 第一章 Java的I/O演进之路 1.1 I/O基础入门 1.1.1 Linux网络I/O模型简介 根据UNIX网络编程对I/O模型的分类,UNIX提供了5中I/ ...

  3. Java基础知识二次学习-- 第一章 java基础

    基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...

  4. javaSE习题 第一章 JAVA语言概述

    转眼就开学了,正式在学校学习SE部分,由于暑假放视频过了一遍,略感觉轻松,今天开始,博客将会记录我的课本习题,主要以文字和代码的形式展现,一是把SE基础加强一下,二是课本中有很多知识是视频中没有的,做 ...

  5. 第一章 –– Java基础语法

    第一章 –– Java基础语法 span::selection, .CodeMirror-line > span > span::selection { background: #d7d4 ...

  6. 第一章 Java多线程技能

    1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...

  7. 深入Java虚拟机读书笔记第一章Java体系结构介绍

    第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...

  8. Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述

    第1章 Java程序设计概述1.1 Java程序设计平台 具有令人赏心悦目的语法和易于理解的语言,与其他许多优秀语言一样,Java满足这些要求. 可移植性 垃圾收集 提供大型的库  如果想要有奇特的绘 ...

  9. 第一章Java学习(查漏补缺)

    第一章主要内容: 1.Java的地位:网络地位 语言地位 需求地位 2.Java的特点:①简单 面向对象 平台无关:软件的运行不因操作系统,处理器的变化而无法运行或出现运行错误. ②多线程 动态 3. ...

随机推荐

  1. Java实现 LeetCode 187 重复的DNA序列

    187. 重复的DNA序列 所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对 ...

  2. Java实现LeetCode17. 电话号码的字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...

  3. Tomcat线程模型分析及源码解读

    1 四种线程模型  配置方法:在tomcat conf 下找到server.xml,在<Connector port="8080" protocol="HTTP/1 ...

  4. CentOS 6.X 双网卡绑定配置

    相关环境 主机:Dell PowerEdge R720服务器(背板有4个GE网口) 操作系统:CentOS(RHEL)6.X 网线连接 使用6类网线 将Dell R720 GE网口 0,与交换机A相连 ...

  5. ThinkPHP6.0 + Vue + ElementUI + axios 的环境安装到实现 CURD 操作!

    官方文档地址: ​ ThinkPHP6.0: https://www.kancloud.cn/manual/thinkphp6_0/1037479 ​ ElemetUI: https://elemen ...

  6. Nginx源码编译安装选项

    [Nginx源码编译过程] make是用来编译的,它从Makefile中读取指令,然后编译. make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置. configu ...

  7. 了解Nginx与PHP的交互?

    Nginx可以接收请求并转发给PHP-FPM. 1.开始深入Nginx与FastCGI协议 通过对Nginx新增Server配置实现了nginx与PHP的一次通信,配置文件非常简单. 从上图的Ngin ...

  8. 安装 KubeSphere DevOps 系统

    1.  安装KubeSphere 安装了一夜,终于看到了期待已久的画面 第一步.硬件配置(PS:VirtualBox虚拟机): 操作系统:Ubuntu 18.04 CPU:4核 内存:8G 磁盘:60 ...

  9. 记录一次Flink作业异常的排查过程

    最近2周开始接手apache flink全链路监控数据的作业,包括指标统计,业务规则匹配等逻辑,计算结果实时写入elasticsearch. 昨天遇到生产环境有作业无法正常重启的问题,我负责对这个问题 ...

  10. 一个非侵入的Go事务管理库——如何使用

    在文章"清晰架构(Clean Architecture)的Go微服务: 事物管理"中,我谈到了如何在清晰架构中实现非侵入的事务管理. 它允许你把事务代码与业务逻辑代码分开,并且让你 ...