自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Java线程同步机制】

线程同步机制是一套用于协调线程间的数据访问及活动的机制,该机制用于保障线程安全以及实现这些线程的共同目标。Java平台提供的线程同步机制包括锁、volatile关键字、final关键字、static关键字以及一些相关的API,如Object.wait()/Object.notify()等。

2023-06-08 11:40:41 268

原创 多线程的线程安全

另外,一个处理器上执行的多个操作,从其他处理器的角度来看,其顺序可能与目标代码所指定的顺序不一致。一般而言,如果一个类在单线程环境下能够运作正常,并且在多线程环境下,在其使用方不必为其做任何改变的情况下也能运作正常,那么就称其是线程安全的,相应的我们称这个类具有线程安全性。另一种是利用处理器提供的专门CAS(Compare-and-Swap)指令,CAS指令实现原子性的方式与锁实质上是一样的,差别在于锁通常是在软件这一层次实现的,而CAS是直接在硬件(处理器和内存)这一层次实现的,可以被看做是硬件锁。

2023-06-05 17:58:47 70

原创 比较类排序:快速排序

算法思路快速排序算法的排序流程如下:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为基准数,赋值给pivot,即pivot=A[0]=A[i];3)由后向前搜索(j–),找到第一个小于pivot的值A[j],将A[j]和A[i]的值交换;4)由前向后搜索(i++),找到第

2021-09-07 19:39:10 130

原创 比较类排序算法:冒泡排序

算法思路1、比较相邻的元素。如果第一个比第二个大,就交换它们两个;2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;3、针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。n个元素要比较n-1次public class Test_05_冒泡排序 { public static void main(String[] args) { int[] a= {9,8,5,4,2,0}; bubbleSort(a); Sys

2021-09-07 19:27:25 95

原创 递归:斐波那契数列

斐波那契数列递归递归的实现步骤斐波那契数列递归什么是递归递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数或者方法的算法。通俗来说,递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归的实现步骤递归的三大要素第一要素:明确你这个函数想要干什么。先不管函数里面的代码什么,而是要先明白,你这个函数的功能是什么,要完成什么样的一件事。第二要素:寻找递归结束条件。我们需要找出当参数为啥时,递归结束

2021-09-07 18:58:21 742

原创 java中转型的概念

转型上溯造型,即向上转型(Upcasting)是指子类转换为父类,这是自动转换;转换的前提是具有继承或实现关系。向上转型损失了子类新扩展的属性和方法,仅可以使用从父类中继承的属性和方法。下溯造型,即向下转型(Downcasting)称之为强制转换,是将父类对象显式的转换成子类类型。曾经向上转换过的对象,才能再向下转换。对象不允许不经过上溯造型而直接下溯造型。1、上溯造型,创建子类对象,赋值给父类类型的对象2、下溯造型必须是曾经上溯过的对象才能下溯转回子类类型public class Test_38

2021-08-16 19:47:13 506

原创 java中继承相关

java继承在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承(泛化)。被继承的类称为父类(超类,父类),新的类称为子类(派生类)。子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法。Java中只能单继承,也就是说每个类只能有一个直接父类;一个父类可以有多个子类。 Java语言中,类的继承的声明格式是:在继承关系中:1、子类可以得到父类的属性和方法,这是从父类继承来的;2、子类可以添加新的属性和方法,添加父类所没有的;3、子类可以重新定义父类的属性

2021-08-16 19:41:16 877

原创 无重复字符的最长子串

无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。思路:用滑动窗口1、定义一个map集合(k,v),key值为字符串的字符,value值为字符的索引加1,加1表示该字符是第几个字符。2、定义子串开始的位置是start,结束位置为end,初始值都为0,指向第一个字符。3、end不断后移过程中会出现重复的字符,可以用map中的containsKey(key)方法来判断map中是否出现重复的key值。map中的containsKey(key)方法是判断该key在m

2021-08-14 19:30:12 245

原创 二维数组、数组复制、找最大值

二维数组锯齿数组:有长有短矩形数组:一样长短String[][] a=new String[5][];//第二个中括号中空着,表示锯齿数组 String[][] a=new String[5][6];//第二个中括号有值,表示矩形数组public static void main(String[] args) { //锯齿数组:有长有短 int[][] b= { {1,2,3,4}, {5,6}, {7,8,9,10,11}, {12,13,14} }

2021-08-12 16:30:07 157

原创 数组:500人数数

数组:500人数数假设队列中共有500人,每次从1开始数,数到3的人出队,下一个人接着从1开始数,编写程序找到最后剩下的人是哪一个。思路:首先用布尔值来标识每个人是否出队 出队为false,未出队为true 并将每个人的初始值都赋为true,循环中每次数到3的出队,一次数完后从头再开始数。直到未出队的人数等于1,结束循环。遍历数组,找到false的数组下标。public static void main(String args[]) { // 用布尔值来标识每个人是否出队 出队为fa

2021-08-10 14:00:36 622

原创 控制台打印图形

问题描述一、在控制台输出以星号打印的三角形思路:在外部使用循环语句执行5次每次打印1行,每行的内容分别为空格和星号,每行空格缩进的数量为5减去所在行数,星号的数量是所在行数的2倍减1。在内部使用循环语句首先打印空格,然后打印星号"*",对应的打印次数用循环次数控制,打印星号之后就可以换行。public static void main(String[] args) { //打印图形, int n=5;//表示要打印几行 for(int i=1;i<=n;i++) {//i表示每行

2021-08-09 18:25:15 1644

原创 经典循环问题

控制语句的示例一、水仙花数问题描述:水仙花数指一个特殊的三位数,它的各位数字的立方和与其自身相等。请输出所有的水仙花数。编程思路:关键是将三位数的个位、十位和百位数字分别拆分出来。`public static void main(String args[]) { for (int i = 100; i < 1000; i++) { // 循环所有三位数 int a = i % 10; // 拆分出个位数字 int b = (i /

2021-08-09 18:06:00 381

原创 java自增自减

演示i–和--i的使用 i--先给出i的值再自减1,--i先自减1再给出减后的值代码示例 int i = 5; int j = i--; System.out.println("--j=" + j + " --i=" + i);//5 4 j = --i; System.out.println("--j=" + j + " --i=" + i);//3 3 j = j--; System.out.println("--j=" + j + " --i=" + i)

2021-08-09 17:38:36 55

空空如也

空空如也

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

TA关注的人

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