随笔分类 -  Java学习过程

记录日程学习Java的笔记
摘要:使用线程池 背景:经常创建和销毁,使用量特别大的资源,比如并发情况下的线程,对性能影响很大 思路:提前创建好多个线程,放入线程池,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的交通工具。 好处: 提升响应速度(减少创建新线程的时间) 降低资源消耗(重复利用线程池中线 阅读全文
posted @ 2022-03-30 11:37 NeverGGp 阅读(30) 评论(0) 推荐(0)
摘要:线程协作(生产消费者模式) 应用场景:生产者和消费者问题 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止 如果仓库中放有产品,则消费者可以将产品取走消费,否则停止 阅读全文
posted @ 2022-03-30 10:35 NeverGGp 阅读(40) 评论(0) 推荐(0)
摘要:锁Lock 从JDK5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当 java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象 阅读全文
posted @ 2022-03-29 16:52 NeverGGp 阅读(61) 评论(0) 推荐(0)
摘要:死锁 多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题 //死锁:多个线程互相抱着对方需要的资源,然后形成僵持 public class Dead 阅读全文
posted @ 2022-03-29 15:14 NeverGGp 阅读(43) 评论(0) 推荐(0)
摘要:线程同步 并发 同一个对象被多个线程同时操作 形成条件 队列 + 锁 由于同一个进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入锁机制synchronized,当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释 阅读全文
posted @ 2022-03-28 23:21 NeverGGp 阅读(49) 评论(0) 推荐(0)
摘要:守护(daemon)线程 线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 如,后台记录操作日志,监控内存,垃圾回收等待 //测试线程守护 public class TestDaemon { public static void main(String[] 阅读全文
posted @ 2022-03-28 09:02 NeverGGp 阅读(39) 评论(0) 推荐(0)
摘要:线程优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行 线程的优先级用数字表示,范围从1~10 Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread.NORM_PRI 阅读全文
posted @ 2022-03-27 17:11 NeverGGp 阅读(21) 评论(0) 推荐(0)
摘要:线程强制执行_Join Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞 可以想象成插队 //测试join方法 想象成插队 public class TestJoin implements Runnable{ @Override public void run() { System 阅读全文
posted @ 2022-03-27 16:01 NeverGGp 阅读(40) 评论(0) 推荐(0)
摘要:线程礼让 礼让线程,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转化为就绪状态 让CPU调度,礼让不一定成功!看CPU心情 //测试礼让线程 //礼让不一定成功,看CPU心情 public class TestYield { public static void main(String[] 阅读全文
posted @ 2022-03-27 09:36 NeverGGp 阅读(34) 评论(0) 推荐(0)
摘要:线程休眠 sleep(时间)指定当前线程阻塞的毫秒数 sleep存在异常InterruptedException sleep时间达到后,进入线程就绪状态 sleep可以模拟网络延迟,倒计时等 每一个对象都有一个锁,sleep不会释放锁 //模拟网络延迟 //作用:放大问题 public class 阅读全文
posted @ 2022-03-26 10:12 NeverGGp 阅读(108) 评论(0) 推荐(0)
摘要:线程状态 创建状态 new Thread t = new Thread() 线程对象一旦创建就进入到新生状态 就绪状态 当调用start()方法,现场立即进入就绪状态,但不意味着立即调度执行 运行状态 进入运行状态,线程才真正执行线程体的代码块 阻塞状态 当调用sleep,wait或同步锁定时,线程 阅读全文
posted @ 2022-03-26 09:14 NeverGGp 阅读(46) 评论(0) 推荐(0)
摘要:Lamda表达式 希腊字母表排序第十一位,英文名称Lambda 避免匿名内部类定义过多 其实质属于函数式编程概念 (params) → expression[表达式] (params) → statement[语句] (params) → {statements} 线程中的使用形式: new Thr 阅读全文
posted @ 2022-03-25 16:13 NeverGGp 阅读(30) 评论(0) 推荐(0)
摘要:静态代理 真实对象和代理对象都要实现同一个接口 代理对象要代理真实对象 好处: 代理对象可以做很多真实对象做不了的事情 真实对象专注做自己的事情 package com.GGp.demo2; //静态代理 public class StaticProxy { public static void m 阅读全文
posted @ 2022-03-21 16:35 NeverGGp 阅读(51) 评论(0) 推荐(0)
摘要:public class Race implements Runnable{ private static String winner; @Override public void run() { for (int i = 1; i <= 100; i++) { //模拟兔子睡觉 if(Thread 阅读全文
posted @ 2022-03-21 16:11 NeverGGp 阅读(163) 评论(0) 推荐(0)
摘要:多线程 线程三种方式 继承Thread类 子类继承Thread类具备多线程能力 启动线程: 子类对象.start(); 不建议使用: 避免OOP单线程局限 //创建线程方式一:继承Thread类,重写run方法,调用start开启线程 public class TestThread1 extends 阅读全文
posted @ 2022-03-21 16:10 NeverGGp 阅读(26) 评论(0) 推荐(0)
摘要:4. 贪吃蛇小游戏 帧,如果时间片足够小,就是动画,一秒30帧,60帧。 每一帧连起来就是动画,拆开就是静态的图片。 键盘监听 定时器 Timer statics文件夹存放需要的各种图片 定义数据 画上去 监听事件 键盘监听 事件监听 StartGame.java package com.GGp.s 阅读全文
posted @ 2022-03-19 21:49 NeverGGp 阅读(81) 评论(0) 推荐(0)
摘要:3.7 文本框 文本框 public class TestTextField extends JFrame { public TestTextField() { Container contentPane = getContentPane(); //文本框 JTextField jTextField 阅读全文
posted @ 2022-03-18 18:22 NeverGGp 阅读(34) 评论(0) 推荐(0)
摘要:3.6 列表 下拉框 public class TestCombobox extends JFrame { public TestCombobox() { Container contentPane = getContentPane(); //下拉框 JComboBox jComboBox = ne 阅读全文
posted @ 2022-03-18 18:02 NeverGGp 阅读(37) 评论(0) 推荐(0)
摘要:###3.5 按钮 图片按钮 public class TestButton extends JFrame { public TestButton(){ Container contentPane = getContentPane(); //获取资源 URL resource = TestButto 阅读全文
posted @ 2022-03-18 17:14 NeverGGp 阅读(31) 评论(0) 推荐(0)
摘要:###3.4 面板 JPanel public class TestJPanel extends JFrame { public TestJPanel(){ Container container = this.getContentPane(); container.setLayout(new Gr 阅读全文
posted @ 2022-03-18 16:46 NeverGGp 阅读(31) 评论(0) 推荐(0)