随笔分类 -  Java

摘要:String的特性 String 类: 代表字符串。Java 程序中的所有字符串字面值(如 "abc")都作为此类的实例实现。 String 是一个 final 类,代表不可变的字符序列。 字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。 String 对象的字符内容是存储在一个字符数 阅读全文
posted @ 2021-04-17 16:43 klvchen 阅读(67) 评论(0) 推荐(0)
摘要:背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。 好处: 提高响应速度(减少了创建新线程的时间) 降低资源消耗(重复利用线程池中线程 阅读全文
posted @ 2021-04-14 15:01 klvchen 阅读(310) 评论(0) 推荐(0)
摘要:与使用Runnable相比,Callable功能更强大些 相比run()方法,可以有返回值 方法可以抛出异常 支持泛型的返回值 需要借助 FutureTask 类,比如获取返回结果 Future接口 可以对具体 Runnable、Callable 任务的执行结果进行取消、查询是否完成、获取结果等。 阅读全文
posted @ 2021-04-14 14:13 klvchen 阅读(179) 评论(0) 推荐(0)
摘要:生产者(Producer)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下,如果店中有产 阅读全文
posted @ 2021-04-14 13:48 klvchen 阅读(315) 评论(0) 推荐(0)
摘要:线程通信的例子:使用两个线程打印1-180。线程1,线程2交替打印 涉及到的三个方法: wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。 notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。 notifyALL(): 阅读全文
posted @ 2021-04-13 14:32 klvchen 阅读(71) 评论(0) 推荐(1)
摘要:银行有一个账户。 有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打印账户余额。 问题:该程序是否有安全问题,如果有,如何解决? 分析: 是否是多线程问题?是,两个储户线程 是否有共享数据?有,账户(或账户余额) 是否有线程安全问题?有 需要考虑如何解决线程安全问题?同步机制 阅读全文
posted @ 2021-04-13 13:58 klvchen 阅读(103) 评论(0) 推荐(0)
摘要:Lock(锁) 从 JDK 5.0开始,Java 提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当。 java.util.concurrent.locks.Lock 接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程 阅读全文
posted @ 2021-04-12 17:49 klvchen 阅读(70) 评论(0) 推荐(0)
摘要:死锁 不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁 出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续 解决方法 专门的算法、原则 尽量减少同步资源的定义 尽量避免嵌套同步 例子一: package com.klvch 阅读全文
posted @ 2021-04-12 16:58 klvchen 阅读(61) 评论(0) 推荐(0)
摘要:如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为 private,这样,就不能用 new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中 阅读全文
posted @ 2021-04-12 15:10 klvchen 阅读(75) 评论(0) 推荐(0)
摘要:同步方法解决线程安全问题 如果操作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步的。 同步方法的总结: 1.同步方法仍然涉及到同步监视器,只是不需要我们显式的声明。 2.非静态的同步方法,同步监视器是:this 静态的同步方法,同步监视器是:当前类本身 使用实现Runnable接口创 阅读全文
posted @ 2021-04-12 14:11 klvchen 阅读(64) 评论(0) 推荐(0)
摘要:Thread类的有关方法 void start(): 启动线程,并执行对象的run()方法 run(): 线程在被调度时执行的操作 String getName(): 返回线程的名称 void setName(String name): 设置该线程名称 static Thread currentTh 阅读全文
posted @ 2021-04-12 10:52 klvchen 阅读(125) 评论(0) 推荐(0)
摘要:线程的生命周期 JDK 中用 Thread.state 类定义了线程的几种状态 要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用 Thread 类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态: 新建: 当一个Thread类或其子类的对象被声明并创建时, 阅读全文
posted @ 2021-04-10 18:54 klvchen 阅读(76) 评论(0) 推荐(0)
摘要:创建多线程的方式二:实现 Runnable接口 1.创建一个实现了Runnable接口的类 2.实现类去实现Runnable中的抽象方法:run() 3.创建实现类的对象 4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象 5.通过Thread类的对象调用start() p 阅读全文
posted @ 2021-04-08 14:36 klvchen 阅读(185) 评论(0) 推荐(0)
摘要:练习3个窗口同时售票100张 使用继承 Thread 方式 package com.klvchen.java; /** * @author klvchen * @create 2021-04-08-13:58 * * 例子:创建三个窗口卖票,总票为 100 张 * 存在线程安全问题,待解决 */ c 阅读全文
posted @ 2021-04-08 14:05 klvchen 阅读(78) 评论(0) 推荐(0)
摘要:程序(program) 是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程(process) 是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。--生命周期,如: 运行中的QQ,运行中的MP3播放器 程序是静态的,进 阅读全文
posted @ 2021-04-07 14:50 klvchen 阅读(215) 评论(0) 推荐(0)
摘要:编写应用程序 EcmDef.java,接收命令行的两个参数, 要求不能输入负数,计算两数相除。对数据类型不一致(NumberFormatException)、缺少命令行参数(ArrayIndexoutOfBoundsException.除0(ArithmeticException)及输入负数(EcD 阅读全文
posted @ 2021-03-26 14:58 klvchen 阅读(328) 评论(0) 推荐(0)
摘要:ReturnExceptionDemo.java package com.klvchen.java2; public class ReturnExceptionDemo { static void methodA() { try { System.out.println("进入方法A"); thro 阅读全文
posted @ 2021-03-26 11:49 klvchen 阅读(72) 评论(0) 推荐(0)
摘要:如何自定义异常类? 继承于现有的异常结构: RuntimeException, Exception 提供全局常量: serialVersionUID 提供重载的构造器 throw 和 throws 区别: throw 表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。 throws 属于 阅读全文
posted @ 2021-03-26 11:48 klvchen 阅读(72) 评论(0) 推荐(0)
摘要:Java 8 中关于接口的改进 Java 8中,你可以为接口添加静态方法和默认方法。从技术角度来说,这是完全合法的,只是它看起来违反了接口作为一个抽象定义的理念。 静态方法:使用 static 关键字修饰。可以通过接口直接调用静态方法,并执行其方法体。我们经常在相互一起使用的类中使用静态方法。你可以 阅读全文
posted @ 2021-03-25 13:41 klvchen 阅读(82) 评论(0) 推荐(0)
摘要:定义一个接口用来实现两个对象的比较。 interface CompareObject{ public int compareTo(Object o); //若返回值是0,代表相等;若为正数,代表当前对象大;负数代表当前对象小 } 定义一个 Circle 类,声明 radius 属性,提供 gette 阅读全文
posted @ 2021-03-16 15:25 klvchen 阅读(376) 评论(0) 推荐(0)