![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaEE初阶
文章平均质量分 93
坟头种朵喇叭花
停更就转行
展开
-
关于网络编程
指网络上的主机,通过不同的进程以编程的方式实现网络通信(网络数据传输)原创 2024-05-30 19:57:50 · 958 阅读 · 0 评论 -
超级初始网络
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。IP地址和端口号可以定位到网络中唯一的一个进程,计算机之间的传输媒介是光信号和电信号,通过”频率“和”强弱“来表示1和0这样的信息。一般的家用路由器,常见的有5个网口,要想让这几个电脑在同一个局域网上网,就要把他们连接到Lan口,Wan口是用来连上级的路由器的。网游打破了局域网的限制,成就了广域网对战-“传奇”(网游系列的开山之作)“PK”原创 2024-05-25 14:16:31 · 832 阅读 · 0 评论 -
龟兔赛跑(基于GUI与多线程实现)
直击龟兔赛跑现场下面这张图是我们设计龟兔赛跑界面的初始效果与基本组成结构:接下来是我仅代表我个人提出的一些疑问与解答:其实在这里两个动物类就像标签一样标签组件是什么?用于短文本字符串或图片显示固定提示信息。下面给出这个初始界面的代码与效果图:2、多线程实现俩小动物比赛在上面的代码中,我们把兔子乌龟都定为标签类,但是俩东西参加比赛,是要同时参与比赛过程的,这里要利用多线程实现,也就是兔子、乌龟这俩标签要在比赛过程中(进程)移动,他俩的行为都属于这个进程(比赛)中的俩线程。我们知道线程的创建方式有很多原创 2024-05-11 20:27:47 · 717 阅读 · 0 评论 -
GUI-图形化的用户界面
所谓GUI,即图形化的用户界面/接口(Graphical User Interface),实现了采用图形方式显示的计算机操作用户界面。比如下面的QQ登录界面:为了不被落下,Java依旧稳定发挥,它也提供了一套可以轻松构建GUI的工具,将GUI界面封装为类,其中若干类放在了java.awt包和javax.swing包内:java.awt(抽象窗口工具包)依赖于本地操作系统的GUI,缺乏平台独立性,属重量级控件包中主要包括界面组件、布局管理器、事件处理模型及图形和图像工具...java.swing。原创 2024-05-09 19:33:04 · 707 阅读 · 0 评论 -
区区多线程...面试题
Servlet本身是工作在多线程环境下,若在Servlet中创建了某个成员变量,此时若有多个 请求到达服务器,服务器就会多线程进行操作,是可能出现线程不安全的情况的。在创建线程的同时需要指定线程完成的任务,可以直接重写Thread的run()方法,也可以使 用Runnable来描述这个任务。堆区就是多个线程之间共享的,只要把数据放到堆内存中,就可以让多个线程都能访问到。synchronized加在非静态方法上相当于针对当前对象加锁。原创 2024-04-28 21:41:50 · 361 阅读 · 2 评论 -
多线程(六)
可以看出,上述代码需要一个辅助类Result,还需要一系列的加锁和wait、notify操作,代码复杂,容易出错;比如我们知道的StringBuffer中的方法都是加了锁的,这里只是在单线程下使用,但append()方法每次调用都要加锁解锁,这没必要,浪费了大量的资源开销,这下就要给锁消除了...使用细粒度锁,是期望释放锁时其它线程可以使用,这样能够并发执行的逻辑更多,更有利于充分利用多核cpu资源,但是也有可能。Semaphore的PV操作的加减计数器都是原子的,可以在多线程环境下直接使用。原创 2024-04-28 20:40:14 · 1290 阅读 · 1 评论 -
多线程—CAS(五)
可以引入版本号version,约定每次修改余额version++,此时在使用CAS判定时,就不是直接 判定数值了,而是判定版本号,看版本号是否变化:若版本号不变,则表示没有其他线程穿插执行。全称Compare-And-Swap,即“比较并交换”,相当于一个原子的操作,同时完成“读取内存,比较是否相等,修改内存”这三个步骤,本质上需要cpu指令的支持。当多个线程同时对某个资源进行CAS操作,只能有一个线程操作成功,但是并不会阻塞其他线程,其他线程只会收到操作失败的信号。CAS则是通过重试的方式避免穿插执行。原创 2024-04-26 18:14:08 · 678 阅读 · 1 评论 -
多线程基础(一)
执行 isInterrupt() 方法将标志位改为true,线程被唤醒,sleep()抛出InterruptedException异常,但sleep()方法又同时自动清除刚才的标志位,又改回false,循环又继续执行,线程就又无法结束。而start()方法会启动一个新的线程,并在新的线程中异步执行run()方法中的指令,而当前线程会继续执行后续的代码,这就实现了并发执行的效果;所以实际在Java的线程中,直接调用run()方法 和 调用start()方法的主要区别在于线程的执行方式。原创 2024-04-06 16:37:50 · 585 阅读 · 1 评论 -
多线程—锁策略(四)
按照之前对锁的设定,第二次加锁的时候,就会阻塞等待,直到第一次的锁被释放,才能获取到第二个锁,但是释放第一个锁也是由该线程完成的,结果这个锁没有解锁反而又加锁,这也就无法进行解锁操作,这时候就会死锁。若调用increase2( ),则increase()先加了一层锁,在increase2里又调用increase(),这就又加了一层锁,但是上个锁还没释放。一旦该线程锁之后,接下来哪个线程能拿到锁?若线程t1加锁时,发现锁已被占用,而这个占用者正是自己,这时是仍可以获取到锁的,并且让计数器自增;原创 2024-04-24 20:57:52 · 820 阅读 · 0 评论 -
多线程基础—案例(三)
这个时候就可以把这些请求 都放到一个阻塞队列中,然后再由消费者线程慢慢的来处理每个支付请求。这种饿汉模式即便是在多线程的情况下也是线程安全的,因为它在类加载的时候就已经创建了实例,后续只能通过getinstance获取对象,而即便多个线程同时调用getinstance也只是都在进行读取操作,这显然是非常安全的。上面我们已经说了,线程安全问题只会出现在首次创建对象的时候,实例一旦创建好了,后面在多线程环境调用getinstance就不再修改instance了,而只是读取返回,这是线程安全的。原创 2024-04-24 12:57:37 · 1243 阅读 · 0 评论 -
多线程—线程安全(二)
比如说ATM,一个人取款发现里面没钱了,那他得等人来把钱放进去才能有钱,这时候为了避免让他近水楼台先得月一直在那里跟后面的人排队竞争,让他wait(不让他参与排队直接让他在旁边等人放钱进去),让后面的人进行存款业务,等ATM里面有钱了再叫他去取款,这样存款的人跟取款的人都不会饿死。按照之前对锁的设定,第二次加锁的时候,就会阻塞等待,直到第一次的锁被释放,才能获取到第二个锁,但是释放第一个锁也是由该线程完成的,结果这个锁没有解锁反而又加锁,这也就无法进行解锁操作,这时候就会死锁。但可惜的是,寄存器贵。原创 2024-04-20 16:42:10 · 531 阅读 · 0 评论 -
JDBC — Java的数据库编程
JDBC,即Java Database Connectivity,数据库连接。是一种用于执行SQL语句的Java API,它是Java种中的数据库连接规范。这个API由java.sql.*、javax.sql.*包中的一些类和接口组成,为java开发人员提供了一个标准的API,可以为多种关系数据库提供统一访问。原创 2024-04-04 13:10:37 · 854 阅读 · 1 评论 -
文件操作 — IO
方法返回值类型方法签名说明intread()返回0~255之间的数据(一个字节byte),返回-1表示读到文件末尾int最多读取b.length字节的数据到b中,返回实际读到的数量intvoidclose()关闭字节流while (len!=-1) {方法返回值类型方法签名说明void写入要给字节的数据void将b这个字符数组中的数据全部写入os中intvoidclose关闭字节流void。原创 2024-03-08 22:16:42 · 634 阅读 · 1 评论