第一章 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. Elasticsearch系列---生产集群部署(下)

    概要 本篇继续讲解Elasticsearch集群部署的细节问题 集群重启问题 如果我们的Elasticsearch集群做了一些离线的维护操作时,如扩容磁盘,升级版本等,需要对集群进行启动,节点数较多时 ...

  2. Nginx跨域及Https配置

    一.跨域 1. 什么是跨域? 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制(指一个域下的文档或脚本试图去请求另一个域下的资源,这 ...

  3. (二)SQL注入常用的内置函数整理(以MySql为例)

    [1]@@datadir 函数作用:返回数据库的存储目录构造SQL语句 select @@datadir;   [2]@@version_compile_os 函数作用:查看服务器的操作系统SQL语句 ...

  4. 使用liunx系统自带的工具sar监控指定接口速率

    1.路由器双出口部署,接口可以实现负载分担,在接口负载比例设置为1:2之后,管理员反馈流量有些异常,内网tracert -d 外网域名或者IP,都走一条链路. 2.底层尝试使用sar命令监控两个接口的 ...

  5. k8s学习-文档&概念

    1.文档大全 kubernetes objects文档(yaml文件编写): https://kubernetes.io/docs/concepts/overview/working-with-obj ...

  6. 掌握SpringBoot-2.3的容器探针:基础篇

    欢迎访问我的GitHub 地址:https://github.com/zq2599/blog_demos 内容:原创文章分类汇总,及配套源码,涉及Java.Docker.K8S.DevOPS等 关于& ...

  7. Java并发相关知识点梳理和研究

    1. 知识点思维导图 (图比较大,可以右键在新窗口打开) 2. 经典的wait()/notify()/notifyAll()实现生产者/消费者编程范式深入分析 & synchronized 注 ...

  8. win10 设置开机启动VMware虚拟机并打开指定镜像

    1.设置win10开机启动应用 把应用程序的‘快捷方式’放到“系统启动文件夹”里即可. 2.开机启动VMware虚拟机并打开指定镜像 a.右键VMware Workstation快捷方式,看属性 b. ...

  9. 解决Maven静态资源过滤问题

    在项目的pom.xml中添加下面的内容 <build> <resources> <resource> <directory>src/main/java& ...

  10. PE文件介绍 (1)

    PE文件介绍 PE文件主要是windows操作系统下使用的可执行文件格式,PE文件是指32位的可执行文件也叫做PE32,64位可执行文件叫做PE+或者PE32+ PE文件格式 种类 主扩展名 可执行类 ...