第一章 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. Android中如何使用单选对话框

    给Button设置OnClick事件设置 int id=0; final String [] s={"单选A","单选B","单选C",&q ...

  2. java计算时间从什么时候开始 为什么从1970年开始 java的时间为什么是一大串数字

    Date date = new Date(0); System.out.println(date); 打印出来的结果: Thu Jan 01 08:00:00 CST 1970 也是1970 年 1 ...

  3. 基于Nginx实现访问控制、连接限制

    0 前言 Nginx自带的模块支持对并发请求数进行限制, 还有对请求来源进行限制.可以用来防止DDOS攻击.阅读本文须知道nginx的配置文件结构和语法. 1. 默认配置语法 nginx.conf作为 ...

  4. java关键字static用法详解

    java中有53个关键字,其中包含2个保留字,这篇文章主要介绍一下static这个关键字. static在java中算是一个比较常见的关键字,有着多种用法,因此很有必要好好地了解一番. 一.定义 st ...

  5. iOS-AutoLayout中动画使用的细节 和 iOS layout机制

    在Main.storyboard拖入一个UIView,随便设置一个背景色, 使用autolayout  为紫色的view添加约束 :(0,0,100,100) , 为该view添加动画代码如下: #i ...

  6. hibernate 用注解方式生成uuid方法

    //配置uuid,本来jpa是不支持uuid的,但借用hibernate的方法可以实现. @GeneratedValue(generator = "uuid") @Generate ...

  7. Java规则引擎 Easy Rules

    1.  Easy Rules 概述 Easy Rules是一个Java规则引擎,灵感来自一篇名为<Should I use a Rules Engine?>的文章 规则引擎就是提供一种可选 ...

  8. Memory layout

    Text Segment       Text Segment,通常也被称为代码段. 为了防止 heap 或是 stack 的溢出,text 段常被安排在 heap 或是 stack 之后. Text ...

  9. 多线程实现tcp聊天服务器

    多线程tcp  server & client tcp服务端(多线程): from socket import * from threading import Thread def clien ...

  10. (七)POI-读取excel,遍历一个工作簿

    原文链接:https://blog.csdn.net/class157/article/details/92816169,https://blog.csdn.net/class157/article/ ...