第一章 java基本多线程技能
第一章 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基本多线程技能的更多相关文章
- “全栈2019”Java多线程第一章:认识多线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 第一章 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/ ...
- Java基础知识二次学习-- 第一章 java基础
基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...
- javaSE习题 第一章 JAVA语言概述
转眼就开学了,正式在学校学习SE部分,由于暑假放视频过了一遍,略感觉轻松,今天开始,博客将会记录我的课本习题,主要以文字和代码的形式展现,一是把SE基础加强一下,二是课本中有很多知识是视频中没有的,做 ...
- 第一章 –– Java基础语法
第一章 –– Java基础语法 span::selection, .CodeMirror-line > span > span::selection { background: #d7d4 ...
- 第一章 Java多线程技能
1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...
- 深入Java虚拟机读书笔记第一章Java体系结构介绍
第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...
- Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述
第1章 Java程序设计概述1.1 Java程序设计平台 具有令人赏心悦目的语法和易于理解的语言,与其他许多优秀语言一样,Java满足这些要求. 可移植性 垃圾收集 提供大型的库 如果想要有奇特的绘 ...
- 第一章Java学习(查漏补缺)
第一章主要内容: 1.Java的地位:网络地位 语言地位 需求地位 2.Java的特点:①简单 面向对象 平台无关:软件的运行不因操作系统,处理器的变化而无法运行或出现运行错误. ②多线程 动态 3. ...
随机推荐
- Java实现 蓝桥杯VIP 算法训练 打印下述图形
算法训练 4-1打印下述图形 时间限制:1.0s 内存限制:256.0MB 问题描述 使用循环结构打印下述图形,打印行数n由用户输入.打印空格时使用"%s"格式,向printf函数 ...
- java代码(11) ---java代码的优化
java代码的优化 参考了一些Java开发手册有关代码的规范,觉得一段好的代码可以从三个维度去分析.1)性能,2)可扩展性,3)可读性 让我们看看别人是怎么去分析,还有值得我们去学习的地方,也是我正在 ...
- Mybatis多表操作
一:引言 在学习完前面的mybatis基本语法后,大家都有个认知,这个Mybatis太强大了,比之前使用JDBC写方便多了,但是你们当初在使用原生JDBC写SQL查询的时候有没有遇到过多表查询呢?肯定 ...
- Java培训Day01——制作疫情地图(一)
一.前言 此次培训,是为期三天的网上培训.最终的目的是制作出疫情地图.首先我们来看看主要的讲课内容大纲. Day1 |-Java语法学习(个人感觉讲得还可以,主要围绕本次培训作出的讲解,没有像网上的基 ...
- 4.keras-交叉熵的介绍和应用
keras-交叉熵的介绍和应用 1.载入数据以及预处理 import numpy as np from keras.datasets import mnist from keras.utils imp ...
- 【实战】基于OpenCV的水表字符识别(OCR)
目录 1. USB摄像头取图 2. 图像预处理:获取屏幕ROI 2.1. 分离提取屏幕区域 2.2. 计算屏幕区域的旋转角度 2.3. 裁剪屏幕区域 2.4. 旋转图像至正向视角 2.5. 提取文字图 ...
- 使用VBS实现SSH远程登录并自动执行命令
set ws=createobject("wscript.shell")ws.run "Putty所在路径\putty.exe -ssh -pw 你的密码 用户名@192 ...
- Tensorflow从0到1(2)之基础知识
张量 张量是tensorflow中的基本数据结构 # 全零张量 zero_tsr = tf.zeros([row_dim, col_dim]) # 全1张量 ones_tsr = tf.ones([r ...
- 【JMeter_20】JMeter逻辑控制器__事务控制器<Transaction Controller>
事务控制器<Transaction Controller> 业务逻辑: 这个控制器在在业务控制上并没有什么特殊逻辑,可以理解为在简单控制器的基础上添加了统计的功能,当所有子节点全部成功则成 ...
- VNC连接cnetos图形化界面
VNC连接cnetos图形化界面 Linux系统在服务器上一般都直接最小化安装,是不安装图形界面的,但是有时候,有一些特殊情况,需要使用图形界面,而下面就利用VNC来实现类似windows的远程桌面功 ...