跳至主要內容
interrupt方法对线程的影响

在Java中,interrupt() 方法是 Thread 类中的一个实例方法,用于中断线程。它并不直接终止线程的执行,而是设置线程的中断状态(即把该线程的中断标志设为 true)。线程可以定期检查这个中断状态,以判断是否应该提前退出或改变行为。以下是 interrupt() 方法对线程的影响:

1. 中断状态

  • 当调用 thread.interrupt() 时,如果线程正在运行,那么它的中断状态将被设置为 true。线程可以通过 Thread.currentThread().isInterrupted() 来检查自身的中断状态。
  • 如果线程已经处于中断状态,则再次调用 interrupt() 不会有额外的效果。

zheng大约 3 分钟java基础java
Future使用:runnable和callable方法区别

所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法。
在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结果。但调用者仍需要取线程的计算结果。

一、 Future 是什么

作用

future 可以用于异步获取多线程任务结果 , Callable 用于产生结果,Future 用于获取结果

流程

当 Future 进行 submit 开始 , 业务处理已经在多线程中开始 , 而 Get 即从多线程中获取数据
当 Get 获取时业务还未处理完 , 当前线程会阻塞 , 直到业务处理完成 . 所以需要注意 future 的任务安排
使用 future 会有以下效果:


zheng大约 7 分钟java基础java
java操作txt文件总结

1、介绍

(1)Java.io包

File类

这是Java中一个内置的包,专门用于文件读写的一个操作的类
在程序中使用 文件或者流的操作就要导入import java.io.*;

File类可以表示一个文件,还可以表示一个目录(Directory),所以我们可以在程序中用File 类的对象可以表示一个文件 或者 目录
当创建了 File 对象之后,我们可以利用该对象来对文件或者目录进行书属性修改:例如:文件的名称,修改日期的日期等等
File 类的对象 还不能直接对文件进行读写操作,只能修改文件的属性


zheng大约 6 分钟java基础java文件
JDK并发包常用类

1、工具类

提供并发控制手段: CountDownLatch、CyclicBarrier、Semaphore

线程间数据交换: Exchanger

CountDownLatch:

允许一个或多个线程等待其他线程完成操作。

CountDownLatch的构造函数接受一个int类型的参数作为计数器,你想等待n个点完成,就传入n。

两个重要的方法:

countDown():调用时,n会减1。

await():调用会阻塞当前线程,直到n变成0。

await(long time,TimeUnit unit):等待特定时间后,就不会继续阻塞当前线程。


zheng大约 3 分钟java基础java
CountDownLatch

1、CountDownLatch简介

	CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。

	类似的任务可以使用线程的  join()  方法实现:在等待时间点调用其他线程的  join()  方法,当前线程就会等待join线程执行完之后才继续执行,但 CountDownLatch 实现更加简单,并且比 join 的功能更多。

CountDownLatch函数列表

CountDownLatch(int count)
构造一个用给定计数初始化的 CountDownLatch// 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。
void await()
// 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间。
boolean await(long timeout, TimeUnit unit)
// 递减锁存器的计数,如果计数到达零,则释放所有等待的线程。
void countDown()
// 返回当前计数。
long getCount()
// 返回标识此锁存器及其状态的字符串。
String toString()

zheng大约 3 分钟java基础java
java中的Queue队列

1、介绍

    Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构
    Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。

2、Queue的实现:

一个是以ConcurrentLinkedQueue为代表的高性能队列;
一个是以BlockingQueue接口为代表的阻塞队列;

(1)没有实现的阻塞接口队列

	没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口

zheng大约 5 分钟java基础java
并发编程总结

1、Synchronized

	Synchronized是由JVM实现的一种实现互斥同步的一种方式,如果你查看被Synchronized修饰过的程序块编译后的字节码,会发现,被Synchronized修饰过的程序块,在编译前后被编译器生成了monitor enter和monitor exit两个字节码指令。

	这两个指令是什么意思呢?在虚拟机执行到monitor enter指令时,首先要尝试获取对象的锁︰如果这个对象没有锁定,或者当前线程已经拥有了这个对象的锁,把锁的计数器+1;当执行monitorexit指令时将锁计数器-1﹔当计数器为O时,锁就被释放了。如果获取对象失败了,那当前线程就要阻塞等待,直到对象锁被另外一个线程释放为止。

	Java中Synchronize通过在对象头设置标记,达到了获取锁和释放锁的目的。

	Synchronize是非公平锁。

zheng大约 5 分钟面试java
ThreadLocal

引言:本博客《SimpleDateFormat引发的线程安全问题》中提到,可以利用 ThreadLocal 来解决SimpleDateFormat的线程安全问题。之后看到阿里巴巴开发规范中也有提到,SimpleDateFormat禁止使用static进行修饰。

image-20200331153816952
image-20200331153816952

zheng大约 5 分钟java基础java
JAVA数据类型易混概念

1、整型

	在 Java 中 , 整型的范围与运行 Java 代码的机器无关 。	

![image-20200106143552647](/assets/images/inttype.png)

	在通常情况下, int类型最常用。 但如果表示星球上的居住人数 ,就需要使用 long 类型了。byte 和 short 类型主要用于特定的应用场合 ,例如 ,底层的文件处理或者需要控制占用存储空间量的大数组 。

	长整型数值有一个后缀 L 或 1 ( 如 4000000000 L ) 。

	十六进制数值有一个前缀 0x 或 0X ( 如0xCAFE)。

	八进制有一个前缀 0 ,例如 , 010 对应八进制中的 8。(很容易混淆,不建议使用)

	从 Java 7 开始 , 加上前缀 0b 或 0B 就可以写二进制数 。 例如 ,0b1001就是 9 。

	从 Java 7 开始, 还可以为数字字面量加下划线 , 如用1_000_000这些下划线只是为丫让人更易读 。Java编译器会去除这些下划线。 ( 或0b1111_0100_0010_0100_0000表示一百万)

zheng大约 3 分钟java基础java
排序之比较器Comparator<T>

一、Comparator和Comparable区别

	Comparator,又名比较器,是为了比较两个对象的大小而抽象出的一个接口,使用比较多。在java.util下。比较功能,对一些对象的集合施加了一个整体排序 。 可以将比较器传递给排序方法(如Collections.sort或Arrays.sort ),以便对排序顺序进行精确控制。

	Comparable,这个接口往往是可比较类实现的。在 java.lang 包下。Comparable接口对实现它的每个类的对象强加一个整体排序。 这个排序被称为类的自然排序。该接口有且只有一个方法int compareTo(T o)所以继承此接口需要实现该方法。compareTo返回值-1、0、1。  Collections.sort (和Arrays.sort )可以自动对实现此接口的对象进行列表(和数组)排序。

	上篇已经介绍Comparable的用法,此处只介绍Compatator:

zheng大约 1 分钟java基础java
2