首页
学习
活动
专区
圈层
工具
发布

Java 的线程工厂 ThreadFactory原理及源码详解

在JDK的源码使用工厂模式,ThreadFactory就是其中一种。...在我们一般的使用中,创建一个线程,通常有两种方式: 继承Thread类,覆盖run方法,实现我们需要的业务 继承Runnable接口,实现run方法,实现我们需要的业务,并且调用new Thread...r); } 我们可以看到ThreadFactory中,只有一个newThread方法,它负责接收一个Runnable对象,并将其封装到Thread对象中,进行执行。...最简单的ThreadFactory实现 我们可以实现上述接口,做一个最简单的线程工厂出来,源码如下: public class SimpleThreadFactory implements ThreadFactory...JDK中默认的线程工厂 在Executors工具类中,JDK提供了一个非常简单的线程工程,源码如下: static class DefaultThreadFactory implements ThreadFactory

7.2K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java中static的用法

    java访问权限控制 文章目录 java中static的用法 static修饰成员变量 类的成员变量 static修饰方法 static修饰代码块 java中static的用法 在java中static...修饰成员变量 成员变量 静态变量,可以直接通过类名去访问 类的成员变量 类的成员变量包括 类变量(静态变量) 被static修饰的变量 在内存中只有一个拷贝 类内部,可以在任何方法内直接访问静态变量...其它类中,可以直接通过类名访问 实例变量 没有被static修饰的变量 没创建一个实例,就为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响 package cn.zhz.Kind.dh...this // System.out.println(this.age); // m1();//在静态方法中不可以调用实例方法 //在静态方法中不可以调用实例变量 // System.out.println...程序的入口main()方法就是最常用的静态方法 public static void main(String [] args){ } static修饰代码块 静态代码块,当java虚拟机加载类时

    74910

    Java中Synchronized的用法

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 引出: Java中synchronized...---- 一、修饰一个代码块 修饰的结果: 一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞; 多个线程访问各子的对象即使有synchronized...如果在父类中的某个方法使用了synchronized关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的,而必须显式地在子类的这个方法中加上synchronized关键字才可以。...当然,还可以在子类方法中调用父类中相应的方法,这样虽然子类中的方法不是同步的,但子类调用了父类的同步方法,因此,子类的方法也就相当于同步了。...---- 四、修饰一个修饰一个静态的方法 Synchronized也可修饰一个静态方法,用法如下: public synchronized static void method() { // todo

    3.5K30

    Java中Synchronized的用法

    本文将接着讲一下Java线程同步中的一个重要的概念synchronized. synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:  1....我们看下面一个例子: 【Demo1】:synchronized的用法 java hljs has-numbering" style="display: block...如果在父类中的某个方法使用了synchronized关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的,而必须显式地在子类的这个方法中加上synchronized关键字才可以。...当然,还可以在子类方法中调用父类中相应的方法,这样虽然子类中的方法不是同步的,但子类调用了父类的同步方法,因此,子类的方法也就相当于同步了。...---- ---- 修饰一个类 Synchronized还可作用于一个类,用法如下: java has-numbering" style="display: block

    73710

    java中finalized的用法_java中的引用类型

    一个例子 Object类是所有类的父类,如果你去查看java.lang.Object类的源码,你会发现里面有个finalize方法,这个方法没有默认实现,需要子类根据实际情况重写这个方法,但是如果不恰当使用...类里也有一个引用队列,这个引用队列是JVM和垃圾回收器打交道的唯一途径,当垃圾回收器需要回收该对象时,会把该对象放到引用队列中,这样java.lang.ref.Finalizer类就可以从队列中取出该对象...$100(Finalizer.java:14) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 这个线程唯一的职责就是不断的从...java.lang.ref.Finalizer.ReferenceQueue队列中取对象,当一个对象进入到队列中,finalizer线程就执行对象的finalize方法并且把对象从队列中删除,因此在下一次...histo:live 8700|head -n 10命令强制触发一次GC,结果和前面的分析一致,Finalizer对象都放到引用队列中,并依次调用了对象的finalize方法,内存中java.lang.ref.Finalizer

    2.4K10

    Java中compareTo用法

    大家好,又见面了,我是你们的朋友全栈君。...Java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值 String a = “a”; String b = “b”; System.out.println(a.compareTo...参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值 String a = “abc”; String b = “abedfg”; System.out.println...(a.compareTo(b)); 输出-2 1 2 3 4 5 两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值 String a = “abc”; String...“abcde”; String b = “abcd”; System.out.println(a.compareTo(b)); 输出1 1 2 3 4 5 目前compareTo项目中的用途是比较版本号的高低

    76620

    java中instanceof用法

    大家好,又见面了,我是你们的朋友全栈君。 1. java 中的instanceof介绍: 首先,java 中的instanceof是一个运算符,而且是二目运算符,即有两个操作数。...该运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。...用法: result = object instanceof class 参数: Result:布尔类型。 Object:必选项。任意对象表达式。 Class:必选项。任意已定义的对象类。...,B又是A的一个实现类,所以结果为true res = a instanceof B; //因为a是B类型的实例,所以结果为true B b2=(C)new C(); res...= b2 instanceof A; //因为b2是C类型的实例,而C是B的子类,B又是A的一个实现类,所以结果为true res = b2 instanceof B; //因为b2是C类型的实例

    1.7K30

    java中for each循环的用法

    定义和用法 foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。 foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。...forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。 注意: forEach() 对于空数组是不会执行回调函数的。...简单来说,foreach语句就是一个加强的for循环语句,用来遍历数组或对象集合,在foreach代码块中,应该是引用了x的java语句。...格式 for(元素类型type 元素变量x : 遍历对象obj) { 引用了x的java语句; } 在java中的语法:for(type x : collection) { }//在collection...中遍历每一个对象,对象是type类型的x int[] arr = {1.3.5}; foreach(int x:arr){ system.out.println(i +","); } 学习过程中仅作记录

    7K20

    Java中的Scanner用法解析

    大家好,又见面了,我是你们的朋友全栈君。 一、Scanner类简介 Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。...简介 Scanner类是java.util包中的一个类 作用 常用于控制台的输入,当需要使用控制台输入时即可调用这个类 二、Scanner类的用法 使用方法 1、首先需要构造一个...Scanner类的对象,并且与标准输入流System.in关联 Scanner sc=new Scanner(System.in); 2、调用Scanner类对象sc的方法从输入流中获取你需要的输入...说明: 当创建了一个Scanner类对象之后,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给对象sc,若要获取需要的内容,调用sc的方法即可 三、常用方法 1、nextInt...(注:输入数字中不能夹杂除数字、空格、回车之外的其他字符,否则会报错) 2、nextDouble()的用法同理nextInt(),注意:nextInt无法读取小数,否则会报错。

    1.4K30

    java中迭代器的用法

    容器中常用到,迭代器就是用来遍历集合的!使用方法iterator()要求容器返回一个Iterator。使用next()获得序列中的下一个元素。使用hasNext()检查序列中是否还有元素。...Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包括了可以返回迭代器实例的迭代方法。...迭代器可以在迭代过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object obj)删除,可以通过迭代器的remove()方法删除 image.png image.png image.png...循环先获得一个迭代器对象,获得以后然后通过hasNext方法(看看它有没有下一个) image.png image.png image.png 我们知道ArrayList实现了List接口,而List又继承了java.util.Collection...如果Collection直接实现Iterator接口,势必导致集合对象中包含当前迭代位置的数据(指针)。

    1.3K20
    领券