java入门
SpaceX7_s
初学小白,欢迎技术交流
展开
-
线程同步机制和三个线程不安全例子
并发: 同一个对象被多个线程同时操作;1.由于同一进程的多个线程共享同一块存储空间,会发生访问冲突问题.为了访问的正确性,在访问时加入了锁机制(synchronized) 。当一个线程获得对象的排它锁时,独占资源,其他线程必须等待,使用后释放锁即可。2.一个线程持有锁会导致其他所有需要此锁的线程挂起;3.在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题;4.如果一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性能问题1.抢票不安全问题//多个原创 2021-05-05 00:11:25 · 524 阅读 · 2 评论 -
守护线程
线程分为:守护线程和用户线程;虚拟机需要等待用户线程执行完,而不必等待守护线程完成.常见的守护线程:后台记录操作日志,监控内存,垃圾回收等public class Textdaemon { public static void main(String[] args) { God god = new God(); You you =new You(); Thread thread = new Thread(god); thread原创 2021-05-04 01:15:17 · 56 阅读 · 0 评论 -
多线程优先级
Java提供一个线程调度器来监视启动后进去就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行.线程的优先级用数字表示,范围从1~10;Thread.MIN_PRIORITY=1;Thread.MAX_PRIORITY=10;Thread.NORM_PRIORITY=5;使用一下方式改变或获取优先级:getPriority().setPriority(int x)public class TextPriority { public static void main(Str原创 2021-05-04 00:16:11 · 76 阅读 · 0 评论 -
观察线程状态
线程状态:Thread.Statenew: new Thread() 后处于新生状态,尚未启动Runnable: 在Java虚拟机中执行的线程处于此状态Blocked: 被阻塞,等待监视器锁定的线程处于此状态Waiting: 等待另一个线程执行特定动作的线程处于此状态Time_Waiting: 正在等待另一个线程执行动作达到指定等待时间的线程处于此状态;Terminated: 退出的线程处于此状态.//观察线程状态public class TextState { public sta原创 2021-05-04 00:01:12 · 89 阅读 · 0 评论 -
初学线程强制执行
多个线程同时运行的时候我们可以指定一某个线程,让这个线程优先执行,也就是其他的线程让出CPU资源,直到指定的线程执行完毕,其他线程恢复正常工作。强制执行的方法就是join(),join()方法存在方法重载,这里说明一下://线程强制执行,相当于插队public class TextJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 300; i++) {原创 2021-05-03 16:49:50 · 128 阅读 · 0 评论 -
初学线程休眠和礼让
线程休眠,sleep()1、休眠可以使一个线程暂缓处理,休眠时间一到程序就会唤醒继续执行,在Thread类中定义的休眠方法如下:休眠方法一:public static void sleep(long millis) throwsInterruptedException; 休眠方法二:public static void sleep(long millis,intnanos) throws InterruptedException;2、在进行休眠的时候有可能会产生中断异常“InterruptedE原创 2021-05-02 19:47:40 · 137 阅读 · 0 评论 -
初学线程停止(java)
使用标志位将线程停止1.建议线程正常停止,利用次数,不建议死循环2.建议使用标志位,设置一个标志位3.不要使用stop或者destroy等过时的方法或jdk不建议使用的方法//线程停止问题public class TextStop implements Runnable{ //设置一个标识位 private boolean flag = true; @Override public void run() { int i = 0;原创 2021-05-01 02:11:34 · 67 阅读 · 1 评论 -
龟兔赛跑问题(并发)
并发思想实现龟兔赛跑问题,龟兔相当于两个线性同时执行//龟兔赛跑 并发问题public class Race implements Runnable{ private static String winner;//定义获胜方,只有一名 @Override public void run() { //模拟赛道长100 for (int i = 0; i <= 100; i++) { //模拟兔子休息,延时器原创 2021-04-30 20:34:44 · 642 阅读 · 3 评论 -
初识并发问题
并发:是指同一个时间段内多个任务同时都在执行,并且都没有执行结束。并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行 .也就是在同一时间段内,多个线程对同一资源的操作简单的抢票问题(并发)//初识并发问题//多个线程处理一个对象//模拟抢票问题//问题:多个线性处理同一个资源时,线程不安全,数据紊乱public class TextThread03 implements Runnable { //创建火车票对象原创 2021-04-30 20:16:58 · 143 阅读 · 1 评论 -
多线程Lamda表达式
Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体。Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。在Lambda表达式中this是指外围实例,而匿名类中的this原创 2021-04-28 23:54:15 · 221 阅读 · 0 评论 -
GUI实现简易加法计算器(java)
1.写出一个简易计算器需要的组件2.先出监听事件类public class TextCalculator01 { public static void main(String[] args) { new MyCalculator(); }}//计算器类class MyCalculator extends Frame{ public MyCalculator() { //三个文本框 TextField num1 = new.原创 2021-04-26 00:09:07 · 2207 阅读 · 6 评论 -
GUI输入框监听事件
GUI-文本框监听事件//输入框监听事件public class TextText01 { public static void main(String[] args) { new MyFrame(); }}class MyFrame extends Frame{ public MyFrame(){ //TextField是一个文件框组件 TextField textField = new TextField();原创 2021-04-23 23:42:33 · 596 阅读 · 3 评论 -
GUI键盘监听事件(java)
Gui键盘监听事件,实现的效果就是按下键盘控制台输出你按下的键。比如:按下A控制台就输出Apublic class TextKeyFlowLay { public static void main(String[] args) { new keyFrame(); }}class keyFrame extends Frame{ public keyFrame(){ setBounds(2,3,300,400); setVisibl.原创 2021-04-22 00:06:11 · 620 阅读 · 4 评论 -
GUI三种布局管理器(java)
1.流式布局public class TextFlowLayout { public static void main(String[] args) { Frame frame = new Frame(); //组件-按钮 Button button1 = new Button("button1"); Button button2 = new Button("button2"); Button button3 = n原创 2021-04-21 00:30:23 · 828 阅读 · 6 评论 -
初学Panel面板
Panel面板不能单独存在panel可以理解为在frame窗口内的面板,不能单独存在//Panel 可以看成一个空间 不能单独存在public class textPanel { public static void main(String[] args) { Frame frame=new Frame(); Panel panel=new Panel(); //设计布局 frame.setLayout(null);原创 2021-04-18 22:31:29 · 458 阅读 · 0 评论 -
初学GUI创建图形界面
gui编程创建简易图形界面窗口public class textFram { public static void main(String[] args) { //GUI图形界面窗口 Frame frame = new Frame("第一个java图形界面窗口"); //设置窗口可见性 frame.setVisible(true); //设置窗口大小 frame.setSize(400,400);原创 2021-04-17 22:47:27 · 699 阅读 · 0 评论 -
利用switch语句实现加减乘除基本功能(java)
用户交互Scanner要求:读者通过键盘输入数据,然后得出运算结果。基本思路是通过Scanner获取用户输入的数据,通过switch语句来判断用户输入的是什么运算符,写出加减乘除的方法在主函数中通过调用方法来实习。public static void main (String[] args){ //获取用户输入的数据,实现用户交互 Scanner scanner = new Scanner(System.in); //输入第一个数据 Double a =原创 2021-04-14 16:49:28 · 5152 阅读 · 4 评论 -
初学java接口
接口的作用什么是Java的接口?其实接口的概念较为抽象,可以理解为接口是一系列方法和特征的集合。方法和特征是类的组成部分,如果从编程的角度而言,Java的接口可以对应这Java中特定的语法结构。Java接口与Java抽象类是不一样的,抽象类可以实现某些方法,而接口则不能。1.创建一个简单的接口//接口,//interface 定义的关键字,接口都需要实现类public interface Userservice { //接口中所有的定义都是抽象的 publi abstract原创 2021-04-08 23:28:01 · 860 阅读 · 8 评论 -
初学java多态
多态1.什么是多态呢? 即同一种方法可以根据发送对象的不同而采用多种不同的行为方式。2.一个方法的实际类型是确实的,但可以指向对象的引用类型有很多种。多态存在的条件:1.存在继承关系2.子类重写父类的方法3.父类引用指向子类对象1.父类//创建一个简单父类public class Person { public void text(){ System.out.println("person"); }}2.子类//创建简单子类public cl原创 2021-04-03 17:30:12 · 941 阅读 · 6 评论 -
java实现数字的倒序输出
溢出问题32位的int类型数字范围是[-231,231-1],翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。解决数字倒序问题,思路:x%10,x/10一个大的数字%10就可以获的其个位上的数字,以此类型直到为0。public static void main(String[] args){ int number = 54321; } public static int text(int x){ int opp; int number1=0;原创 2021-04-03 00:19:54 · 4573 阅读 · 6 评论 -
java实现字符串反转
toCharArry()方法charAt()方法当是字符串的时候,可以把字符串转换成字符数组方便实现public static void main(String[] args) { String str = "a bcdefg"; text(str); } public static void text(String str){ //toCharArray()方法把字符串转换成字符数组 char[] ans = str.原创 2021-04-02 21:30:37 · 834 阅读 · 2 评论 -
super详解(java)
继承继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。 extends的意思是“扩展”。子类是父类的扩展。2.JAVA中类只有单继承,没有多继承! 继承是类和类之间的一种关系。除此之外类和类之间的关系还有依赖、组合、聚合等。3.继承关系的俩个类,一个为子类(派生类)一个为父类(基类)。子类继承父类使用关键字 extends来表4.子类和父类之间从意义上讲应该具有isa"的关系 object类 super this创建父类、子类,子类中继承父类的所有方法1.main函数pu原创 2021-03-31 22:16:23 · 2071 阅读 · 6 评论 -
初学java封装
封装初识java封装封装的用处:1.提高程序的安全性,保护数据2.隐藏代码的实现细节3.统一接口4.增加系统可维护性这里创建一个类public class Package { //属性私有 private String name;//名字 private int age; //年龄 private int sex;//性别 //1.提供一些操作这个属性的方法 //2.提供publi的get/set的方法,快捷键alt+insert原创 2021-03-28 23:35:48 · 1429 阅读 · 0 评论 -
稀疏数组
初学稀疏数组问题:当一个数组大部分元素为零时,或者同一值的数组时,可以用稀疏数组来保存数组。稀疏数组的处理方法:1.记录数组有几行几列,有多少个不同值2.把不同值得元素的行数列数以及它的值记录在小规模数组中,从而缩小数组规模//创立一个二维数组int[][] array1=new int[11][11];int[1][2]=1;int[2][3]=2;//为赋值部分,自动赋值为0//输出原始数组 System.out.println("输出原始数组:"); fo原创 2021-03-27 00:55:27 · 940 阅读 · 9 评论 -
JAVA冒泡排序
java实现冒泡排序1.数组中相邻两个数字进行比较,如果前一个元素比后一个大时则进行交换2.每次排序都会产生一个最大,或者一个最小的数字3.下一轮则减少一次排序4.以此类推直到所有元素排好序 int temp=0;//中间变量,用于交换载体 boolean falg = false;//定义布尔型的变量 for (int i=0;i<array.length-1;i++){//确定排列趟数 for (int j=0;j<arra原创 2021-03-24 22:10:03 · 552 阅读 · 0 评论 -
java打印九九乘法表
java打印九九乘法表采用拆分的思想先把乘法表第一列打印出来,这就是一个简易的for循环,代码如下:for (int i = 1; i <= 9; i++) { System.out.println(1+"*"+i+"="+(1*i)); }原创 2021-03-21 12:15:40 · 793 阅读 · 0 评论