第一章 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 357 计算各个位数不同的数字个数

    357. 计算各个位数不同的数字个数 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答案应为除去 11, ...

  2. Java实现 LeetCode 66 加一

    66. 加一 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示 ...

  3. mybatis技术总结

    一.框架概述 day1 1.什么是框架 框架是系统的可重用设计,是对J2EE底层技术的封装(JDBC,IO流,多线程,Servlet,Socket). 2.框架解决了哪些问题? 1.解决了技术整合问题 ...

  4. k8s学习-Ingress

    4.5.Ingress Ingress-Nginx github 地址:https://github.com/kubernetes/ingress-nginxIngress-Nginx 官方网站:ht ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  6. [每日一题2020.06.09] leetcode #97 交错字符串 dp

    题目链接 利用动态规划的思想, 对于每种状态(i, j)来说都有(i-1, j) 和 (i,j-1) 需要注意的问题 : 初始化的问题,先把i=0和j=0的状态都初始化后才可以进行dp否则发生数组越界 ...

  7. (五)application/x-www-form-urlencoded(表单请求)

    原文链接:https://blog.csdn.net/justry_deng/article/details/81042379

  8. .NETCore微服务探寻(一) - 网关

    前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目 ...

  9. 034.Kubernetes集群安全-Secret

    一 secret概述 1.1 secret作用 Secret对象,主要作用是保管私密数据,比如密码.OAuth Tokens.SSH Keys等信息.将这些私密信息放在Secret对象中比直接放在Po ...

  10. c++深复制与浅复制区别代码示范vs2015-txwtech

    c++深复制与浅复制区别代码示范vs2015-txwtech c++深复制与浅复制区别代码示范 区别: 深复制: CDemo B = A; B.str[0] = 'K';//B对象里面的元素修改后,A ...