第一章 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实现 蓝桥杯VIP 算法训练 一元三次方程

    问题描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  2. Java中System的详细用法

    System.arraycopy System.arraycopy的函数原型是: public static void arraycopy(Object src, int srcPos, Object ...

  3. Java GUI 窗体事件

    import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; publi ...

  4. java中Dateformat类的详细使用(详解)

    DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat ...

  5. Mybatis缓存及延迟加载策略

    一:引言 通过前面几篇的文章介绍了Mybatis的一对一.一对多.多对多关系的配置及实现,可是大家发现了吗?在执行关联查询的时候,直接会把当前查询的主表里包含的副表也查询后封装到对象里,其实在实际开发 ...

  6. 「MoreThanJava」机器指令到汇编再到高级编程语言

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  7. Java基础(十)

    一.XML概述 属性文件是用来描述程序配置,属性文件包含了一组名/值对.属性文件采用的是一种单一的平面层次结构,同时属性文件要求键是唯一的. XML格式能够表达层次结构,并且重复的元素不会被曲解. H ...

  8. 【图机器学习】cs224w Lecture 16 - 图神经网络的局限性

    目录 Capturing Graph Structure Graph Isomorphism Network Vulnerability to Noise 转自本人:https://blog.csdn ...

  9. Flask 的模板渲染

    Flask 的模板渲染 渲染模板语言和django很像,都是用{{}},{%%} 注意点: 1 flask给模板传值,render_template("index.htm",use ...

  10. Swift Core Data 图片存储与读取

    1.首先推出选择拍照还是相册的alert,代码如下: UIAlertController *alert = [UIAlertController alertControllerWithTitle:ni ...