自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 标准的线程池

CallerRunsPolicy:如果线程池满,提交任务的线程自己去执行该任务,不会使用线程池中的线程去执行。a、当前工作线程数小于核心线程数时,即使其他工作线程处于空闲状态也会创建新的线程,直到线程数达到核心线程数。b、在核心线程已经用完,但阻塞队列没有满的情况下,对于新接受的任务不会创建新线程,而是会被添加到阻塞队列中。shutdownNow():立即关闭线程池,中断正在执行的线程,清空队列中的任务,返回尚未执行的任务。SHUTDOWN:该状态下线程池不在接受新任务,但会将工作队列中的任务执行完成。

2023-02-09 22:27:25 167

原创 线程的基本操作

如果线程被Object.wait(),Thread.join(),Thread.sleep()阻塞,此时调用该线程的interrupt(),此时会抛出InterruptedException中断异常,提早结束阻塞。共三个线程,第一个线程没设置名字,线程使用Thread-0,"0"代表编号。第二个线程设置名称为“线程A”,第二个线程设置名称为“线程B”,join(long millis):被合并线程执行结束,或者等待执行millis长的时间。线程不受影响,继续执行,只是线程的中断标志被设置为true。

2023-02-05 23:03:01 150

原创 线程与java线程的状态学习

从操作系统的层面讲,线程一般有5种状态:新建,就绪,运行,阻塞,终止。

2023-02-05 00:49:51 218

原创 线程的调度模式

操作系统线程的调度方式是:基于CPU时间片进行线程调度,线程只有得到CPU时间片才执行,没有得到时间片的线程处于就绪状态,等待系统分配时间片。现代操作系统提供了强大的线程管理能力,java不需要在进行独立的线程管理和调度,而是将线程调度的工作委托给操作系统去完成。系统按照优先级分配CPU时间片,优先级高的线程分配的时间片多。如果线程的优先级一样,那么系统会随即挑选一个线程执行。系统平均分配CPU时间片,所有线程轮流占有CPU,线程之间是平等的。线程的调度模式有两种:分时调度模式,抢占式调度模式。

2023-02-04 23:15:50 593

原创 创建线程的4种方法

但是在实际使用中我们不会采用Executors这种方法来创建线程池,而是采用线程池的标准创建方式(即使用ThreadPoolExecutor来创建线程池),因为Executors这几种创建方式都存在弊端。FutureTask的构造器需要一个Callable类型 的对象,因此我们创建一个类CallableThread来实现Callable接口,并作为参数传递给FutureTask的构造器。Runnable:就是之前上文提到过的,用来创建线程的Runnable,可以作为Thread线程实例的target。

2023-02-04 11:01:12 368

原创 Thread类的基本信息

getId(),获取线程的唯一标识id。

2023-02-02 20:14:07 61

原创 栈内存中方法的入栈,出栈顺序测试

在main()方法中调用f1(),在f1()中调用f2(),测试三个方法在栈内存中的执行顺序。

2023-02-01 23:15:14 160

原创 进程与线程(1)

每启动一个java程序就会启动一个JVM进程,在这个JVM进程内部,java程序都是以线程来运行的,JVM找到程序的main()方法,然后运行main()方法,这样就启动的一个主线程。一个进程中有一个或者多个线程,各个线程之间共享进程的内存空间和系统资源。c、进程之间是相互独立的,但一个进程中各个线程共享该进程的方法区内存,堆内存和系统资源。就是代码段,是进程的程序指令在内存中的位置,包含需要执行的指令集合。包含进程的描述信息和控制信息,是进程存在的唯一标识。指线程ID,线程名称,线程状态,线程优先级等。

2023-01-31 22:39:56 66

原创 JMM(5)

d、load(载入):作用于工作内存变量,把读取到的主内存变量加载到工作内存的变量副本中。c、线程对变量的操作(读取,赋值等)都在工作内存中进行,不能直接读取主内存中的变量。h、write(写入):作用于主内存变量,把从工作内存传递的值赋给主内存的变量。g、store(存储):作用于工作内存变量,把工作内存中变量的值传递给主内存。b、每条线程有自己的工作内存,工作内存中保存了该线程使用的变量的主内存副本。指的是变量怎样从主内存拷贝到工作内存,又从工作内存同步到主内存的过程。

2023-01-30 23:26:06 78

原创 类加载器,双亲委派机制(四)

类加载器只用于类的加载动作。否则即使两个类来源同一个class文件,被同一个虚拟机加载,但加载他们的类加载器不同,这连个类就不相等。因此所有类的加载请求,都会先交给启动类加载器来进行加载,当启动类加载器无法加载时,则会交给扩展类加载器进行加载,当扩展类加载器无法加载时则会交给应用程序类加载器进行加载....以此类推。该加载器也称作系统类加载器,负责加载用户类路径上的所有类库。当一个类加载器收到的加载类的请求,它自己不会尝试加载这个类,而是把这个请求委托给父加载器去完成。

2023-01-29 23:38:39 61

原创 JVM类(class)加载机制(3)

类从被加载到虚拟机中开始,到卸载为止。其生命周期会经历如下7个阶段。其中绿色是顺序执行的。(加载执行完成才会执行验证...)解析:有可能在初始化之前,也可能在初始化之后(动态绑定)。

2023-01-28 22:41:00 85

原创 IDEA中的项目上传到码云(git)

设置后VCS 变成了Git。

2023-01-18 23:45:01 675

原创 Integer比较时用==还是equals

一般情况在代码代码中比较interger的值时用==是没有问题的,但是也存在一定的范围。可以看到,当Integer表示的值在[-128 ~ 127]之间,使用==时能达到我们的预期的。可是一旦超过这个范围,结果就不是我们想要的了。如上图,我们看到一旦integer超过了[-128~127],==比较的结果为false;这是因为Integer在进行比较的时候会自动的进行拆箱操作,而进行拆箱操作的时候会调用valueOf方法。

2023-01-18 21:38:16 7658

原创 JVM运行时数据区域(2)

java虚拟机运行时数据区域主要包含:1.程序计数器2.虚拟机栈3.本地方法栈4.方法区5.堆下图绿色部分的数据是所有线程共享的。

2023-01-17 23:28:48 53

原创 认识JVM(1)

JRE(Java Runtime Environment):是java运行时的环境,包含了JVM,java基础类库,是java程序运行所需要的软件环境。JDK(Java Development Kit):是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包。JVM(Java Virtual Machine):是java虚拟机,我们常说的JVM指的是HotSpot。JVM可以理解为bin目录,lib就是jvm工作所需的类库。JRE = JVM + 系统类库。

2023-01-16 22:31:38 115

原创 java中的浅拷贝和深拷贝测试

克隆出来的对象改变他的值,实际上是改变了克隆出来对象String类型成员的指向,不会影响被克隆对象的值及其指向。1.userClone 克隆了user的基本类型的值(age),而对于引用类型的clothes其实只是克隆了其地址。若是出现多个复杂类型的嵌套,或者User类中有其他类的引用,其他类中又存在复杂类型和别的类......,岂不是每个类都要实现Cloneable接口,并重写clone方法,超级麻烦。实际上String作为不可更改的类,在new赋值的时候,就已经创建了一个新的对象;

2023-01-14 21:16:42 175

原创 try-catch-finally,在catch中return,还会执行finally吗?

try-catch-finally执行流程

2023-01-13 21:38:21 230

原创 final修饰符

final修饰符

2023-01-12 23:44:39 46

原创 == 和 equals的测试

== 和 equals

2023-01-11 23:01:56 85

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除