-
Java 线程池原理
线程池原理线程池做的工作主要是控制运行的程序数量,处理过程中将任务放入队列,然后再线程创建后启动这些任务,如果线程数量超过最大数量,超出数量的线程排队等候,等待其他线程执行完毕,再从队列中取出任务来执行。主要特点为:线程复用,控制最大并发数,线程管理。线程复用每一个Thread的类都有一个start方法。当调用start启动线程时Java虚拟机会调用该类的run方法。那么此类的run()方法中就是调用了Runnable对象的run()方法。我们可以继续继承重写Tread类,在其Start方...…
-
Java 同步锁与死锁
同步锁当多个线程同时访问同一个数据时,很容易出现问题。为了避免这种情况出现,我们要保证线程同步互斥,就是指并发执行的多个线程,同一时间内只允许一个线程访问共享数据。Java中可以使用Synchronized关键字来取得一个对象的同步锁。死锁多个线程被同时阻塞,它们中的一个或者全部都在等待某个资源被释放。…
-
Java 线程上下文切换
线程上下文切换利用时间片转轮的方式。CPU给每个任务都设置一定的时间,然后把当前任务的状态保存下来,在加载下一任务的状态后,继续服务下一个任务。任务的状态保存及再加载,这段过程就叫做上下文切换。时间片轮转的方式使多个任务在同一颗CPU上执行变成可能。进程是指程序运行的实例,在linux系统中线程就是能并行运行且与他们的父进程(创建他们的进程)共享同一地址空间(一段内存区域)和其他资源的轻量级的进程。上下文是指某一个时间点CPU寄存器和程序计数器的内容。寄存器是指CPU内部的数量较少但是速度...…
-
Java 线程基本方法
Java 线程基本方法线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等。线程等待 (wait)调用该方法线程进入waiting状态,只有等待另外线程的通知或者被中断才会返回,需要注意的是调用wait()方法,会释放对象锁。因此wait方法一般用在同步方法或者同步代码块中。线程睡眠 (sleep)sleep导致当前线程休眠,与wait方法不同sleep不会释放当前占有锁,sleep(long)会导致线程进入TIMED-WATING 状态。...…
-
Java 公平锁和非公平锁
Java非公平锁JVM 按随机就近原则分配锁的机制称为不公平锁,ReentrantLock 在构造函数中提供了是否公平锁初始化的方式,默认为非公平锁。非公平锁执行效率远远超于公平锁,除非程序又特殊需要,否则最常用非公平锁的分配机制。加锁时不考虑排队等待问题,直接尝试获取锁,获取不到自动到队尾等待 非公平锁性能比公平锁高 5~10 倍,因为公平锁需要在多核的情况下维护一个队列 Java 中的 synchronized 是非公平锁,ReentrantLock 默认的 lock()方法采用的...…
-
Java 锁
Java 锁乐观锁乐观锁是一种乐观思想,认为读多写少,遇到并发的可能低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下此期间别人是否更新过这个数据,采取在写的时候先读取当时的版本号然后加锁锁操作,如果失败则要重复读-比较-写的操作。悲观锁悲观锁就是悲观思想,认为写多,遇到并发写的可能性比较高,每次去拿数据的时候都认为别人会修改,所以在读写数据的时候都会上锁,这样别人想读写这个数据的似乎就会block直到拿到锁。Java中的悲观锁就是Synchronized,...…
-
Java 后台线程 Daemon
Java 后台线程后台线程是指程序运行时后台提供的一种通用服务的线程,这种线程不属于程序中不可或缺的一份部分。后台线程也称为守护线程,我们创建的线程一般是用于处理我们自己的相关业务,但是后台线程主要用于公共任务,例如JVM处理垃圾回收,使用的就是后台线程。我们创建线程可以在start()启动前,thread.setDaemon(true);将其设置为后台线程,也可以使用isDaemon()来判断线程是否为后台线程。特点: 守护线程也称为服务线程,他是后台线程,有一个特性为用户线程提供公共...…
-
Java start 和 run 的区别
start和run区别 start() 方法用来启动线程,真正实现多线程运行,这时无需等待run方法体代码执行完毕,可以直接执行下面的代码。 通过调用Thread类的start方法来启动线程,这时线程处于就绪状态,并没有运行。 方法run()是线程体,包含要执行的线程内容,线程进入运行状态,开始运行run函数中的代码,run方法运行结束,线程终止。…
-
Java sleep 和 wait 的区别
sleep 和 wait 的区别 对于sleep()方法,sleep属于Tread类,wait()属于Object类。 sleep()方法导致程序执行指定的时间,让出cpu改其他线程,但是监控状态依然保持,当指定时间到后又会恢复自动运行状态。sleep需要传入指定的时间,wait不需要。 调用sleep方法过程中,线程不会释放对象锁。 调用wait方法后线程会放弃对象锁,进入等待对象的等待锁池,只有针对此对象调用的notify或者notifyall线程才准备获取对象锁进入运行状态。…
-
Java 多线程并发
Java多线程并发并发和并行并发是指同一个时间段内多个任务同时在执行,并且都没有执行结束,并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间积累而成,所以说并发的多个任务在单位时间内不一定同时在执行。并行是指在单位时间内多个任务同时在执行。在多线程编程实践中,线程个数往往多于CPU的个数,所以一般都称为多线程并发编程而不是多线程并行编程。Java线程实现/创建方式继承Thread类Thread类本质是实现Runnable的接口一个实例,代表一个线程实例,代表一个线程的实例,启动...…
-
Java基础-集合
Java集合接口继承关系和实现集合类存放于Java.util包中,主要有3种:set(集)、list(列表包含Queue)和map(映射)。1. Collection : Collection 是集合List、Set、Queue的最基本的接口。2. Iterator: 迭代器,可以通过迭代器遍历集合中的数据。3. Map: 是映射表的基础接口ListJava的List是常用的数据类型。List是有序的集合,Java List一共三个实现类,分别是ArrayList、Vector和Linke...…
-
JVM 类加载机制
JVM 类加载机制JVM 类加载机制分为五个部分:加载、验证、准备、解析、初始化。类的生命周期: 加载-> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载加载加载阶段会在内存中生成一个代表这个类的java.lang.class对象,作为这个类的各种数据的入口。主要这类不一定非要从Class文件获取,这类可以从包中读取,也可以在运行时计算生成(动态代理),也可以由其他文件生成(比如JSP文件转换称为对应的Class类)。验证验证阶段主要...…
-
Java IO/NIO
JAVA IO阻塞IO模型最传统的IO模型,在读写数据过程中会发生阻塞现象。当用户线程发出IO请求后,内核会查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程处于阻塞状态,用户线程交出CPU。当数据就绪后, 内核将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除block状态。典型的IO阻塞模型例子:data = socket.read();如果数据没有就绪就会一直组晒在read。非阻塞IO模型当用户线程发起一个read操作后,并不需要等待,马上就得到一个结果。如果结果是一...…
-
Java JVM相关知识点
基本概念JVM是Java Virtual Machine Java虚拟机的缩写,JVM是一种计算机设备的规范,是一个虚构出来的计算机,通过实际计算机上仿真模拟各种计算机功能来实现。引入Java语言虚拟机后,Java语言在不同平台上运行不需要重新编译。Java语言使用Java虚拟机屏蔽与具体平台相关信息,使Java语言编译只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行。运行过程Java源文件,通过编译器产生对应的.class文件,也就是字节码文件,字节码...…
-
Java基础二(基础语法等)
基础语法 大小写敏感 类名 大写开头 驼峰 方法名 小写开头 驼峰 文件名 与类名一致 大写开头驼峰 主方法入口 public static void mian(String []args) 由mian方法为入口,开始执行Java 标识符所有标识符都应该以字母,$,_开始关键字不能为标识符大小写敏感Java 修饰符访问类的 public 公共 private 私有 protected 保护的 default 其他 修饰符 ...…
-
Java基础一(环境配置与hello world)
安装Java环境下载jdk官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html傻瓜式安装安装完成配置 环境变量安装完成后 命令行输入 java -version 测试是否安装成功编辑器 idea亘古不变的hello worldpublic class HelloWorld { public static void main(String[] args) { System.out.pri...…
-
欢迎来到我的个人博客!
欢迎来到我的个人博客,我的github: liandaoshou github…