Java学习笔记Day11——线程补充、基础API及常见算法(1)

本文详细介绍了Java中的线程概念,包括守护线程的特性和设置方法,线程生命周期,释放锁操作与死锁的场景。此外,还探讨了Java基础API,如Math类的不同部分,Random类,日期时间API,System类以及字符串类的相关知识点和常用方法。
摘要由CSDN通过智能技术生成

目录

【线程补充】

1. 守护线程

(1)什么是守护线程,有什么特点

(2)如何设置线程为守护线程

2. 线程生命周期

3. 释放锁操作和死锁

(1)释放锁的操作

(2)不会释放锁的操作

(3)死锁

4. sleep()和wait()的区别

【基础API及常见算法】

1. Math类API

(1)java.lang.Math

(2)java.math

(3)java.util.Random类

2. 日期时间API

3. System类

(1)java.lang.System系统类

(2)JVM的运行环境类 java.lang.Runtime

4. 数组工具类

5. 字符串类 

(1)字符串的特点

(2)字符串的对象的创建方式

(3)字符串对象的个数问题

(4)内存分析

(5)字符串的拼接

(6)字符串的比较

(7)什么是空字符串?


【线程补充】

1. 守护线程

(1)什么是守护线程,有什么特点

        线程分为被守护线程和守护线程

        当系统中所有的被守护线程都结束之后,守护线程就算自己的事情没有做完,也会自动结束

        即系统中不会只有守护线程在单独运行

        如:GC线程就是守护线程

(2)如何设置线程为守护线程

public final void setDaemon(boolean on)

2. 线程生命周期

分为JDK1.5之前和之后,从5种方法变为6种方法

3. 释放锁操作和死锁

(1)释放锁的操作

        当前线程的同步方法、同步代码块执行结束

        当前线程在同步代码块、同步方法中出现了未处理的Error或Exception,导致当前线程异常结束

        当前线程在同步代码块、同步方法中执行了锁对象的wat()方法,当前线程被挂起,并释放锁

(2)不会释放锁的操作

        线程执行同步代码块或同步方法时,程序调用Thread.sleep()、Thread.yield()方法暂停当前线程的执行

        线程执行同步代码块时,其他线程调用了该线程的suspend()方法将该线程挂起,该线程不会释放锁(同步监视器)。应尽量避免使用suspend()和resume()这样的过时来控制线程

(3)死锁

        不同的线程分别锁住对方需要的同步监视器对象不释放,都在等待对方先放弃时就形成了线程的死锁。一旦出现死锁,整个程序既不会发生异常,也不会给出任何提示,只是所有线程处于阻塞状态,无法继续

4. sleep()和wait()的区别

(1)sleep不释放锁,wait释放

(2)sleep指定休眠的时间,wait可以指定时间也可以无限等待直到notify或notifyAll

(3)sleep在Thread类中声明的静态方法,wait在Object中声明

因为调用wait方法是由锁对象调用,而锁对象类型是任意类型的对象,那么希望任意类型的对象都要有的方法,只能声明在Object类中

【基础API及常见算法】

1. Math类API

(1)java.lang.Math

Math.ceil():向上取整
Math.floor():向下取整
Math.round:四舍五入
Math.pow(a,b):a的b次幂
Math.sqrt():开方
Math.random():[0,1)的随机值
Math.PI:圆周率
Math.max(a,b):返回最大值
Math.min(a,b):返回最小值

 java.lang.Math包的类/接口不用Import导包,其他包的类使用需要导包

(2)java.math

①BigInteger

大整数

BigInteger b1 = new BigInteger("165848648464648946161");
BigInteger b2 = new BigInteger("165848648464648946161");
//计算要调方法
b1.add(b2);
b1.subtract(b2);
b1.multiply(b2);
b1.divide(b2);
b1.remainder(b2);

②RoundingMode枚举类

CEILING:向正无穷方向的舍入模式
DOWN:向零舍入的舍入模式
FLOOR:向负无穷舍入
HALF_DOWN;向最接近数字舍入,如果距离相等,向下舍入
HALF_EVEN:向最接近数字舍入,如果距离相等,向相邻的偶数舍入
HALF_UP:向最接近数字方向的舍入模式,如果与两个相邻数字距离相等,向上舍入
UNNECESSARY:用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入
UP:远离零方向舍入

③BigDecimal

希望比float和double更精确的,使用BigDecimal

BigDecimal a1 = new BigDecimal("464.464987876546878765431346");
算术操作和BigInteger一样
但是注意如果两个小数相除除不尽,会报异常
处理为保留n位小数,保留格式为RoundingMode里的模式
如:
a1.divide(a2,20,CEILING);

(3)java.util.Random类

Random rand = new Random();
rand.nextInt();
rand.nextInt(10)    //输出[0,10)的数,括号内的为边界
rand.nextDouble();
rand.nextBoolean();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值