概念
渡安x
人间值得历经山河
展开
-
线程调度器和时间分片
线程调度器是一个操作系统服务,它负责为Runnable状态的线程分配CPU时间。一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现。同上一个问题,线程调度并不受到Java虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让你的程序依赖于线程的优先级)。时间分片是指将可用的CPU时间分配给可用的Runnable线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时...原创 2020-12-29 15:28:04 · 273 阅读 · 0 评论 -
线程优先级
每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个int变量(从1-10),1代表最低优先级,10代表最高优先级。java的线程优先级调度会委托给操作系统去处理,所以与具体的操作系统优先级有...原创 2020-12-29 15:27:22 · 218 阅读 · 0 评论 -
如何让正在运行的线程暂停一段时间
可以使用Thread类的Sleep()方法让线程暂停一段时间。需要注意的是,这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为Runnable,并且根据线程调度,它将得到执行。...原创 2020-12-18 08:52:43 · 1232 阅读 · 0 评论 -
Java线程池中submit() 和 execute()方法的区别
两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中。而submit()方法可以返回持有计算结果的Future对象,它定义在ExecutorService接口中,它扩展了Executor接口,其它线程池类像ThreadPoolExecutor和ScheduledThreadPoolExecutor都有这些方法。...原创 2020-12-16 11:24:51 · 664 阅读 · 0 评论 -
Java线程池
创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。...原创 2020-11-18 11:23:53 · 113 阅读 · 0 评论 -
Java中的Semaphore是什么
Java中的Semaphore是一种新的同步类,它是一个计数信号。从概念上讲,从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release()添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore只对可用许可的号码进行计数,并采取相应的行动。信号量常常用于多线程的代码...原创 2020-11-13 09:22:50 · 414 阅读 · 0 评论 -
Java中的同步集合与并发集合的区别
同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发集合的可扩展性更高。在Java1.5之前程序员们只有同步集合来用且在多线程并发的时候会导致争用,阻碍了系统的扩展性。Java5介绍了并发集合像ConcurrentHashMap,不仅提供线程安全还用锁分离和内部分区等现代技术提高了可扩展性。...原创 2020-10-16 08:53:54 · 292 阅读 · 0 评论 -
Java中interrupted 和 isInterrupted方法的区别
interrupt方法用于中断线程。调用该方法的线程的状态为将被置为”中断”状态。注意:线程中断仅仅是置线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛出interruptedException的方法)就是在监视线程的中断状态,一旦线程的中断状态被置为“中断状态”,就会抛出中断异常。interrupted查询当前线程的中断状态...原创 2020-09-10 08:53:52 · 914 阅读 · 0 评论 -
ThreadLocal变量
ThreadLocal是Java里一种特殊的变量。每个线程都有一个ThreadLocal就是每个线程都拥有了自己独立的一个变量,竞争条件被彻底消除了。它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它,如果为每个线程提供一个自己独有的变量拷贝...原创 2020-09-08 16:19:10 · 298 阅读 · 0 评论 -
什么是线程安全?servlet是线程安全吗?
线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。Servlet不是线程安全的,servlet是单实例多线程的,当多个线程同时访问同一个方法,是不能保证共享变量的线程安全性的。Struts2的action是多实例多线程的,是线程安全的,每个请求过来都会new一个新的action分配给这个请求,请求完成后销毁。...原创 2020-09-03 09:02:00 · 788 阅读 · 0 评论 -
Java知识点整理 - 7:网络编程
1、网络编程概述 (1)网络模型 OSI参考模型 TCP/IP参考模型 (2)网络通讯要素 IP地址 端口号 传输协议 (3)网络通讯前提: **找到对方IP **数据要发送到指定端口。为了标示不同的应用程序,所以给这些网...原创 2020-03-21 15:38:41 · 117 阅读 · 0 评论 -
Java知识点整理 - 6:IO流
1、IO流概述 (1)用来处理设备(硬盘,控制台,内存)间的数据。 (2)java中对数据的操作都是通过流的方式。 (3)java用于操作流的类都在io包中。 (4)按照流操作的数据的类型不同:分为字节流和字符流。字符流是为了方便中文的操作而来的。 (5)按照流的流向不同分为:输入流,输出流2、IO流常用基类:...原创 2020-03-13 16:11:47 · 199 阅读 · 0 评论 -
Java知识点整理 - 4:jdk1.5的新特性
(1)静态导入: **import语句可以导入一个类或某个包中的所有类 **import static语句导入一个类中的某个静态方法或所有静态方法 静态导入后,静态方法前面就不用写类名.方法的方式类调用 **语法举例: import static java.lang.Math.sin...原创 2020-02-21 17:59:54 · 127 阅读 · 0 评论 -
Java知识点整理 - 2: 面向对象
1、面向对象思想: (1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象, 强调具备功能的对象; (2)思想特点: A:是符合人们思考习惯的一种思想; B:将复杂的事情简单化了; C:将程序员从执行者变成了指挥者; ...原创 2020-02-11 18:30:21 · 248 阅读 · 0 评论 -
Java知识点整理 - 5:集合框架
1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。 生活中很多数据的描述都采用的是字符串的。而且我们还会对其进行操作。 所以,java就提供了这样的一个类供我们使用。 (2)创建字符串对象 A:String():无参构造 **举例:...原创 2020-03-05 17:32:36 · 239 阅读 · 0 评论 -
Java知识点整理 - 3:多线程
1、进程和线程: 进程:正在进行的程序。每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。 线程:进程内部的一条执行路径或者一个控制单元。 两者的区别: 一个进程至少有一个线程 进程在执行过程中拥有独立的内存单元,而多个线程共享内存;2、jvm多线程的启动是多线程吗?java的虚...原创 2020-02-20 14:22:16 · 168 阅读 · 0 评论 -
Java知识点整理 - 1:基础知识
1、JVM、JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。 java语言是跨平台,jvm不是跨平台的。 JRE(Java Runtime Environment):java的运行环境,包括jvm+java的核心类库。 JDK(Java Developm...原创 2020-02-02 09:59:42 · 246 阅读 · 0 评论 -
java的cacerts证书库导入证书
第一:进入某个https://www.xxx.com开头的网站,把要导入的证书下载过来, 在该网页上右键 >> 属性 >> 点击"证书" >>再点击上面的"详细信息"切换栏 >> 再点击右下角那个"复制到文件"的按钮就会弹出一个证书导出的向导对话框,按提示一步一步完成就行了。 例如:保存为abc.cer,放在C盘下第二:如...原创 2020-05-28 17:48:07 · 841 阅读 · 0 评论 -
Java中的线程通讯方法:wait()、notify() 和 notifyAll()
当一个线程进入wait之后,就必须等其他线程notify/notifyall,使用notifyall,可以唤醒所有处于wait状态的线程,使其重新进入锁的争夺队列中,而notify只能唤醒一个。如果没把握,建议notifyAll,防止notigy因为信号丢失而造成程序异常。notify() 方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有用武之地。而notifyAll()...原创 2020-04-23 15:31:55 · 340 阅读 · 0 评论 -
volatile 变量 和 atomic 变量 的 区别
Volatile变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不能保证原子性。例如用volatile修饰count变量那么 count++ 操作就不是原子性的。而AtomicInteger类提供的atomic方法可以让这种操作具有原子性如getAndIncrement()方法会原子性的进行增量操作把当前值加一,其它数据类型和引用变量也可以进行相似操作。...原创 2020-04-23 15:31:13 · 872 阅读 · 1 评论 -
Daemon线程,后台线程
所谓后台(daemon)线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这个线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。反过来说, 只要有任何非后台线程还在运行,程序就不会终止。必须在线程启动之前调用setDaemon()方法,才能把它设置为后台线程。注意:后台进程在不执行finally子句的情况下就会终止其ru...原创 2020-08-23 16:53:00 · 138 阅读 · 0 评论 -
多线程上下文切换
在上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运行。从这个角度来看,上下文切换有点像我们同时阅读几本书,在来回切换书本的同时我们需要记住每本书当前读到的页码。在程序中,上下文切换过程中的“页码”信息是保存在进程控制块(PCB)中的。PCB还经常被称作“切换桢”,“页码”信息会一直保存到CPU的内存中,直到他们被再次使用。上下文切换是存储和恢复...原创 2020-08-19 09:40:09 · 180 阅读 · 0 评论 -
不可变对象与并发
不可变对象即对象一旦被创建它的状态就不能改变,反之即为可变对象。不可变对象的类即为不可变类。Java平台类库中包含许多不可变类,如String、基本类型的包装类、BigInteger和BigDecimal等。不可变对象天生是线程安全的。它们的常量(域)是在构造函数中创建的。既然它们的状态无法修改,这些常量永远不会变。不可变对象永远是线程安全的。只有满足如下状态,一个对象才是不...原创 2020-08-14 17:13:26 · 170 阅读 · 0 评论 -
Java线程调度算法
计算机通常只有一个CPU,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务.在运行池中,会有多个处于就绪状态的线程在等待CPU,JAVA虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配CPU的使用权.有两种调度模型:分时调度模型和抢占式调度模型。...原创 2020-08-10 09:08:51 · 282 阅读 · 0 评论 -
Java中如何唤醒被阻塞的线程
在Java发展史上曾经使用suspend()、resume()方法对于线程进行阻塞唤醒,但随之出现很多问题,比较典型的还是死锁问题。 解决方案可以使用以对象为目标的阻塞,即利用Object类的wait()和notify()方法实现线程阻塞。首先,wait、notify方法是针对对象的,调用任意对象的wait()方法都将导致线程阻塞,阻塞的同时也将释放该对象的锁,相应地,调用任意对象的no...原创 2020-08-03 16:42:17 · 947 阅读 · 0 评论 -
多线程同步与互斥的实现方法
线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步。线程间的同步方...原创 2020-07-27 14:16:15 · 629 阅读 · 0 评论 -
在java中wait和sleep方法的不同
最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行。在Java中线程的状态一共被分成6种:初始态:创建一个Thread对象,但还未调用start()启动线程时,线程处于初始态。运行态:在Java中,运行态包括就绪态和运行态。就绪态:该状态下的线程已经获得执行所需的所有资源,只要CPU分配执行权就能运行...原创 2020-01-17 11:16:16 · 632 阅读 · 0 评论 -
如何停止一个正在运行的线程
使用共享变量的方式在这种方式中,之所以引入共享变量,是因为该变量可以被多个执行相同任务的线程用来作为是否中断的信号,通知中断线程的执行。使用interrupt方法终止线程如果一个线程由于等待某些事件的发生而被阻塞,又该怎样停止该线程呢?这种情况经常会发生,比如当一个线程由于需要等候键盘输入而被阻塞,或者调用Thread.join()方法,或者Thread.sleep()方法,在...原创 2020-07-21 09:07:16 · 876 阅读 · 0 评论 -
CycliBarriar和CountdownLatch有什么区别
CyclicBarrier可以重复使用,而CountdownLatch不能重复使用。Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对...原创 2020-07-15 13:46:07 · 495 阅读 · 0 评论 -
Future和Callable,以及FutureTask
在Java并发程序中FutureTask表示一个可以取消的异步运算。它有启动和取消运算、查询运算是否完成和取回运算结果等方法。只有当运算完成的时候结果才能取回,如果运算尚未完成get方法将会阻塞。一个FutureTask对象可以对调用了Callable和Runnable的对象进行包装,由于FutureTask也是调用了Runnable接口所以它可以提交给Executor来执行。C...原创 2020-07-14 15:34:57 · 174 阅读 · 0 评论 -
阻塞队列
阻塞队列是一个支持两个附加操作的队列。在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。JDK7提供了7个阻塞队列,分别是:ArrayBlockingQueue :一个由数组结构组成的有...原创 2020-06-19 15:54:58 · 129 阅读 · 0 评论 -
什么是原子操作
原子操作是指一个不受其他操作影响的操作任务单元。原子操作是在多线程环境下避免数据不一致必须的手段。处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。在Java中可以通过锁和循环CAS的方式来实现原子操作。 CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作。int...原创 2020-07-13 10:03:16 · 2736 阅读 · 0 评论 -
死锁&活锁,死锁&饥饿
死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。产生死锁的必要条件:互斥条件:所谓互斥就是进程在某一时间内独占资源。 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。 循环等待条件:若干进程之间形成一种头尾相接的循环等...原创 2020-06-15 09:00:13 · 270 阅读 · 0 评论 -
java中守护线程和本地线程区别
java中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on);true则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在Thread.start()之前调用,否则运行时会抛出异常。两者的区别:虚拟机(JVM)何时离开,Daemon是为其他...原创 2020-06-11 17:39:36 · 513 阅读 · 0 评论 -
整理一些Java面试题
/*** 春节前整理一些Java面试题分享给大家,祝大家鼠年快乐~~*/1、在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on);true则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()...原创 2020-01-22 10:50:34 · 295 阅读 · 1 评论 -
Java的keytool命令
keytool:用于管理密钥和证书的工具,使用户和管理员可以管理自己的公钥、私钥及相关的证书,用于 自我认证(通过数字签名,可以是 用户向别的用户 或 服务认证自己) 或 数据完整性 以及 认证服务,允许用户存储他们的通信对等者的公钥(以证书的形式),允许用户管理在对称加密/解密(如DES)使用的密钥。keytool将密钥和证书存储在一个所谓的密钥仓库(keystore)中,用...原创 2019-12-08 13:26:55 · 556 阅读 · 0 评论 -
IO流
IO流 io流的顶层都是抽象类,集合的顶层都是接口1-按流向输入流:读取数据数据流:写出数据2-按操作字节流:以字节为单位操作数据 byte,可操作任何类型的文件,但操作中文可能会乱码字节输入流 顶层InputStream 子类FileInputStream字节输出流 顶层OutputStream 子类FileOutputStream字符流:以字符为单位操作数据 专...原创 2019-01-08 21:35:22 · 275 阅读 · 0 评论 -
File类
File类:用来操作文件(夹)的类,即用来操作路径的1-构造方法:*public static File(String pathname); 根据给定的路径创建File对象*public static File(String parent, String child); 根据给定的父目录字符串和子文件(夹)名*public static File(File parent, Stri...原创 2019-01-08 21:05:01 · 163 阅读 · 0 评论 -
web前端-HTML知识体系(初学者)
1、web语义化和SEOweb语义化是根据内容的结构化(内容语义化),选择合适的标签(代码语义化),便于开发者阅读和写出更优雅的代码,同时让浏览器的爬虫和机器更好地解析代码。SEO是指在了解搜索引擎自然排名的机制的基础上,对网站进行内部及外部的调整优化,改进网站在搜索引擎关键字中的排名,获得等多的展现量,吸引更多目标客户点击访问网站,从而达到网络营销及品牌建设的目标。搜索引擎通过爬虫技...原创 2019-01-02 09:37:59 · 376 阅读 · 0 评论 -
web前端-css知识体系(初学者)
1、选择器常用的选择器有类选择器、标签选择器、ID选择器、伪类选择器、属性选择器等。css权重即优先级顺序是:内联样式>ID选择器>伪类选择器>属性选择器>类选择器>标签选择器>*。需要特别注意的是,“!important”会覆盖所有样式规则,即“!important”的优先级最高。2、定位定位有相对定位relative、绝对定位absolu...原创 2019-01-02 20:51:48 · 222 阅读 · 0 评论