Java
majic_Jing
这个作者很懒,什么都没留下…
展开
-
死锁问题,一篇解决!!
什么是死锁多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力。然而,并发执行也带来了新的问题——死锁。死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace) ) ,若无外力作用,这些进程(线程)都将无法向前推进。结论:参与死锁的进程数至少为两个 参与死锁的所有进程均等待资源 参与死锁的进程至少有两个已经占有资源 死锁进程是系统中当前进程集合的一个子集 死锁会浪费大量系统资源,甚至导致系统崩溃。饥饿与死锁的区别 饥饿(S原创 2020-08-05 23:55:04 · 375 阅读 · 1 评论 -
银行家算法
什么是银行家算法 银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。 在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统转载 2020-08-05 23:53:46 · 1618 阅读 · 0 评论 -
CAS存在的三大问题以及解决方案
CAS的由来在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 一个线程持有锁会导致其它所有需要此锁的线程挂起。 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。独占锁是一种悲观锁,synchronized就是一种独占原创 2020-08-05 10:02:45 · 1528 阅读 · 0 评论 -
Statement详细理解
1、创建Statement对象Statement对象用Connection的方法createStatement创建,代码如下: Connection connection = DriverManager.getConnection(url,user,password); Statement statement = connection.createStatement();为了执...原创 2019-10-17 22:21:56 · 2309 阅读 · 0 评论 -
Java自动装箱
自动装箱规范要求boolen、byte、char≤127,介于-128~127之间的short和int被包装到固定的对象中。例如将a、b初始化为100,对他们进行比较,一定会成立。关于自动装箱的说明:首先,由于包装器类引用可以为null,所以自动装箱有可能会抛出一个异常:另外,如果在一个条件表达式中混用Interger和Double类型,Interger会自动拆箱,提升为Do...原创 2019-10-15 10:59:20 · 186 阅读 · 0 评论 -
java对象包装器
有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类,例如,Integer类对应基本类型int。通常,这些类称为包装器(wrapper)。这些类名字很明显:Integer、Long、Float、Double、Short、Byte、Character、Void、和Boolen(前6个类派生于公共的超类Number)。注意:对象包装器类是不可变的,即一旦构造...原创 2019-10-15 10:31:30 · 340 阅读 · 1 评论 -
四种访问修饰符
首先先说一下四种访问修饰符都是谁:①private;②protected;③public;④package/friendly/default 。现在详细说一下四种访问修饰符的访问权限:1)private私有的,只有自身可以访问,同包子类、不同包子类都不可继承,同包类、其他类均不可访问。2)package自身和同包类都可以访问,其他类不可以访问;同包子类可以继承,不同包子类...原创 2019-10-06 22:36:23 · 2700 阅读 · 0 评论 -
理解Java的方法调用
下面是方法调用的详细过程:1)编译器查看对象的声明类型和方法名。假设调用x.f(program),且隐式参数x声明为C类的对象。需要注意的是,可能有多个名为f但声明类型不同的方法,例如f(int)、f(String)等。编译器会列举所有C类中名为f的方法以及其超类中属性为public、protected且名为f的方法。至此,编译器得到所有可能被调用的候选方法。2)编译器查看...原创 2019-10-06 21:24:12 · 165 阅读 · 0 评论 -
Java将数字金额转为大写
首先将数字金额定义为字符串类型,然后再转为int或double型;判断是否是负数或有小数点,再进行下一步处理。代码如下:package com.study;import com.sun.deploy.util.StringUtils;import java.util.Scanner;public class RMB { /** *@Title: Co...原创 2019-09-28 23:26:51 · 300 阅读 · 0 评论 -
java实现打印螺旋数组
想要的效果如下:或是这样:实现这样的效果并不是很难,只是考虑的需要复杂一点,要判断每行、每列数组的方向是从左到右还是从上到下等,等把这些搞明白,数组的打印就简单多了。下面假设打印一个n*n的数组,代码如下:package com.study;import java.util.Scanner;public class SpiralMatrix { public ...原创 2019-09-28 00:47:50 · 789 阅读 · 0 评论 -
Java的for循环 、do-while、while三种方法求n的阶乘
for循环:package com.study;import java.util.Scanner;public class CountFor { public static void main(String[] args) { int x; int sum=1; System.out.println("请输入数字n:"); ...原创 2019-09-25 23:42:08 · 11446 阅读 · 1 评论 -
Java递归求n的阶乘
package com.study;import java.util.Scanner;public class CountDi { public static int factorial(int n){ int sum=1; for (int y=1;y<=n;y++) { if (n==0){ ...原创 2019-09-25 23:37:39 · 645 阅读 · 0 评论