自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 简单模拟实现一个线程池

这里模拟的是固定数量的线程池。下面通过一个示例简单演示一下。废话不多说之间上代码。

2024-01-25 22:33:49 227 1

原创 线程池的简单介绍及使用

corePoolSize: (核心线程数)这是线程池中始终存在的线程数,即使这些线程处于空闲状态。maximumPoolSize:(最大线程数) 是线程池允许的最大线程数。keepAliveTime:(保持存活时间)这是非核心线程(超过corePoolSize的线程)在变为空闲状态后可以在队列中等待新任务的最长时间。超过这个时间,如果队列中没有新任务,线程会被终止。unit:时间单位workQueue:这是一个阻塞队列,用于存放等待执行的任务。

2024-01-19 22:34:19 335 2

原创 单例模式——懒汉模式的双重检测锁问题

饿汉模式的特点是在类加载的时候就创建并初始化一个实例,实例在整个程序运行期间都是唯一的。上面代码在单线程模式下是没问题的,但是在多线程模式下就会存在线程安全问题。可能导致在多线程环境下,还没执行2就已经被其他线程返回了一个刚分配的地址。懒汉模式的特点是需要的时候在创建实例,实例在整个程序运行期间都是唯一的。的方法使用,而非静态方法则要创建实例,这与我们单例模式的规则不相符。我们发现上面线程安全问题只存在于首次创建实例的情况,因此我们只需要对。粗略的看上去好像没什么问题,实际上这里还有一个指令重排序的坑。

2023-12-09 22:13:50 499 5

原创 wait和notify方法的介绍

让线程释放锁并进入等待状态,直到被唤醒,我们称为"死等"让线程释放锁并进入等待状态,直到被唤醒或者超过指定的时间。方法并不会马上释放锁,而是执行完同步代码块才释放锁。让线程释放锁并进入等待状态,要搭配。线程被唤醒后需要重新参与锁竞争,从。有三个线程,分别只能打印A,B和C。方法让三个线程都进入等待状态,通过。要求按顺序打印ABC,打印10次。我们这里介绍两个wait方法。有一个参数的wait方法。就可以很好的解决这个问题。唤醒等待的线程,要搭配。这里同样介绍两个方法。

2023-12-09 21:11:52 33

原创 线程安全的原因与解决方法

线程安全是指在多线程环境中,一个类或者方法能够保证在任意时刻,无论在哪个线程中调用,都能表现出一致的行为,且不会对其他线程产生不可预测的影响.相反我们则称为存在线程安全问题或者线程不安全。

2023-12-08 08:45:00 144 3

原创 线程的六种状态

等待状态,线程主动放弃CPU资源,进入等待队列,等待其他线程发送信号或唤醒,不会自动唤醒。下面结果分别是10000和0,第一个是等待到唤醒,第二个是到一定时间自动唤醒。方法执行完毕或者主线程结束,线程就结束了,线程一但终止就不能复生。超时等待,与上面的等待状态类似,不过在超过一定时间会自动唤醒。新创建的线程,尚未启动,此时线程对象已经创建,还未使用。等待CPU分配资源,当资源可用时,线程会被调度并执行。可执行状态,可分为正在执行和即将执行,已经使用。关键字修饰的方法或者代码块。方法执行完毕或者主线程结束。

2023-11-28 21:56:01 33 5

原创 Thread类的基本用法

众所周知,线程的是分时复用的,我们也不知道一个可执行文件会在执行哪个线程,或者已经执行到了哪里?这虽然是一个解决办法但我们不知道要休眠多久,不能适用于多种情况,因此需要我们的。那我们能不能在主线程执行到一定位置或者得到想要的结果的时候中断其他线程呢?循环的内容,那我们能不能让主线程在休眠10s后关闭我们新建的这个线程呢?根据方法重写的规则,我们不能修改方法签名,因此我们就不能用。给注释了,就会发现线程又死循环了,这是为什么呢?方法在哪个线程使用,就是哪个线程等待使用。因此,想让上面线程结束,我们只要加。

2023-11-28 11:01:16 141 3

原创 进程与线程的联系与区别

进程是计算机操作系统中一个正在运行的程序的实例,是系统分配资源的基本单位我们一打开任务管理器就能看到很多进程,每一个进程在执行过程都需要消耗一定的硬件资源,因此进程是系统分配资源的基本单位当频繁创建和销毁线程时,系统的开销就会比较大,而线程的出现就解决了进程的这一问题线程也被称为"轻量级进程",在进程的基础上进行了改进,线程在进程内部,是调度执行的基本单位线程也有自己的PCB,与进程的PCB相比。

2023-11-25 21:07:49 64 4

原创 MySQL的简单增删查改

按列名排序,默认升序 (NULL被当成一个很小的数)的数据库中创建一个学生表,有学号和姓名两个列。显示数据库 可以看到我们新创建的数据库。使用当前数据库,方可进行下面表操作。关于数据类型,我在网上找了几张图。接下来我们来演示一下相关的操作。后面要有一个参数M,M表示长度。创建数据库 我们创建一个名为。可以删除数据库 删除新创建的。查询的列名中可以使用表达式。我也在网上找了运算符的表。M表示长度,D表示精度。表示从m行开始显示n行。下面我们在上面使用的。

2023-11-06 17:02:41 30

原创 Java:接口

我们先写3个接口分别对应“会飞的”,“会跑的”,“会游的”电源插座插孔可以插各种符合要求的电器,充电器,电视等等。电脑的USB接口可以插U盘,鼠标等等设备。接口的定义格式与定义类的格式基本相同,将。我们再创建一个具体的动物(父类动物省略)是固定搭配,可以不写,推荐用。关键字,就定义了一个接口。上面4个方法都是可以的,继承关系,类与接口之间是。注意:子类和父类之间是。的写法,代码更加简洁。

2023-09-11 19:48:22 30

原创 Java:抽象类

抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法,使用抽象类可以多一层校验,当实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题.通过前面多态的内容,我们发现父类Animal的eat方法好像并没有什么实际工作,都是通过子类的eat方法来完成,像这种没有实际工作的方法,我们可以把它设计成一个。,包含抽象方法的的类我们称为。

2023-08-07 21:39:14 35 2

原创 Java:多态

重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程。重写的好处在于子类可以根据需要,定义特定。总的来说:同一件事,发生在不同对象身上,就会产生不同的结果。向上转型:实际就是创建一个子类对象,将其当成父类对象来使用。也就是说子类能够根据需要实现父类的方法。语法格式:父类类型 对象名 = new 子类类型()例如下面的eat方法就是使用了重写。向上转型的优点:代码实现更加灵活。下面是三种发生向上转型的场景。缺点:不能调用子类特有的方法。我们来看下面这段有坑的代码。

2023-08-04 18:04:00 48 6

原创 java:继承

继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。根据上面我们知道子类与父类有相同名字的成员变量会优先使用子类的成员变量,那如果我要使用父类的同名成员变量呢?,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员即可。继承主要解决的问题是:共性的抽取,实现代码复用。可以发现成员变量重名的时候使用的是子类的成员变量。子类会将父类的成员变量或者成员方法继承到子类中。

2023-08-02 22:03:39 51 6

原创 java:简单认识类

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。还有OOD(面向对象的设计),OOA(面向对象的分析)面向对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是计算机并不认识洗衣机,需要开发人员告诉计算机什么是洗衣机。

2023-07-30 20:05:41 75 9

原创 java:方法的使用

方法语法格式// 方法定义修饰符 返回值类型 方法名称([参数类型 形参 …]){方法体代码;[return 返回值];

2023-07-27 21:37:19 73 9

原创 初识java:运算符

)、关系运算符(< > ==)、逻辑运算符、位运算符、移位运算符以及条件运算符等。

2023-07-26 12:13:54 85 11

原创 初识Java:基本数据类型与变量

2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此。// 编译出错: a + b==》int + long–> long + long 赋值给int时会丢失数据。// 编译成功:a + b==>int + long—>long + long 赋值给long。a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值。一个字符占用两个字节, 表示的字符种类更多, 包括中文。

2023-07-25 12:07:24 118 8

原创 C语言之#define的一些注意事项

return 0;1return 0;#define 不止可以定义常数;这里可能有人会有疑问为什么最后不加;n;return 0;100;n;return 0;1n;return 0;;n;return 0;printfn;return 0;n;return 0;;n;return 0;经过预编译就会变成 int i=100;;

2023-07-17 00:14:42 157 2

原创 C语言自定义类型:结构体,位段,枚举,联合

int x;int y;} p1;//声明类型的同时定义变量p1 struct Point p2;//定义结构体变量p2 //初始化:定义变量的同时赋初值。x , y };struct Stu //类型声明 {//名字 int age;//年龄 };//初始化 struct Node {int data;} n1 = {10 , {//结构体嵌套初始化 struct Node n2 = {20 , {//结构体嵌套初始化也可以这样struct SN。

2023-07-12 22:12:38 41 1

空空如也

空空如也

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

TA关注的人

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