![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
kaka_d
这个作者很懒,什么都没留下…
展开
-
创建线程的方式四:使用线程池
创建线程的方式四:使用线程池好处:1.提高响应速度(减少了创建新线程的时间)2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)3.便于线程管理corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间后会终止面试题:创建多线程有几种方式?四种!class NumberThread implements Runnable{ @Override public void run() {原创 2021-10-25 18:07:36 · 145 阅读 · 0 评论 -
创建多线程方式三:实现Callable接口
创建线程的方式三:实现Callable接口-JDK 5.0新增如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大?call()可以有返回值的。call()可以抛出异常,被外面的操作捕获,获取异常的信息Callable是支持泛型的//1.创建一个实现Callable的实现类class NumThread implements Callable{ //2.实现call方法,将此线程需要执行的操作声明在call()中 @Override原创 2021-10-25 17:56:19 · 142 阅读 · 0 评论 -
多线程-线程通信:生产者消费者例题
/** * 线程通信的应用:经典例题:生产者/消费者问题 * * 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品, * 店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员 * 会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品 * 了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。 * * 分析: * 1. 是否是多线程问题?是,生产者线程,消费者线程 ..原创 2021-10-25 17:44:11 · 386 阅读 · 0 评论 -
多线程之sleep和wait的异同
线程通信的例子:使用两个线程打印 1-100。线程1, 线程2 交替打印class Number implements Runnable{ private int number = 1; private Object obj = new Object(); @Override public void run() { while(true){ synchronized (obj) { obj.notify();原创 2021-10-25 16:29:56 · 77 阅读 · 0 评论 -
解决线程安全问题的方式三:Lock锁 --- JDK5.0新增
解决线程安全问题的方式三:Lock锁 — JDK5.0新增面试题:synchronized 与 Lock的异同?相同:二者都可以解决线程安全问题不同:synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())2.优先使用顺序:Lock 同步代码块(已经进入了方法体,分配了相应资源) 同步方法(在方法体之外)面试题:如何解决线程安全问题?有几种方式class Window原创 2021-10-23 11:41:09 · 60 阅读 · 0 评论 -
线程安全之死锁
演示线程的死锁问题1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁2.说明:1)出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续2)我们使用同步时,要避免出现死锁。public class ThreadTest { public static void main(String[] args) { StringBuffer s1 = new StringBuffer();原创 2021-10-23 11:37:52 · 74 阅读 · 0 评论 -
线程安全之(使用同步机制将单例模式中的懒汉式改写为线程安全的)
使用同步机制将单例模式中的懒汉式改写为线程安全的public class BankTest {}class Bank{ private Bank(){} private static Bank instance = null; public static Bank getInstance(){ //方式一:效率稍差// synchronized (Bank.class) {// if(instance == nu原创 2021-10-23 11:15:08 · 69 阅读 · 0 评论 -
线程安全问题及处理方法
同步代码块处理实现Runnable的线程安全问题例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式1.问题:卖票过程中,出现了重票、错票 -->出现了线程的安全问题2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票。3.如何解决:当一个线程a在操作ticket的时候,其他线程不能参与进来。直到线程a操作完ticket时,其他线程才可以开始操作ticket。这种情况即使线程a出现了阻塞,也不能被改变。4.在Java中,我们通过原创 2021-10-23 11:13:32 · 274 阅读 · 0 评论 -
创建多线程方法二(实现Runnable接口)
创建多线程的方式二:实现Runnable接口创建一个实现了Runnable接口的类实现类去实现Runnable中的抽象方法:run()创建实现类的对象将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象通过Thread类的对象调用start()比较创建线程的两种方式。开发中:优先选择:实现Runnable接口的方式原因:1. 实现的方式没有类的单继承性的局限性2. 实现的方式更适合来处理多个线程有共享数据的情况。联系:public class Th原创 2021-10-23 09:41:37 · 167 阅读 · 0 评论 -
多线程的创建(一)
多线程的创建,方式一:继承于Thread类创建一个继承于Thread类的子类重写Thread类的run() --> 将此线程执行的操作声明在run()中创建Thread类的子类的对象通过此对象调用start()例子:遍历100以内的所有的偶数//1. 创建一个继承于Thread类的子类class MyThread extends Thread { //2. 重写Thread类的run() @Override public原创 2021-10-23 08:50:58 · 43 阅读 · 0 评论 -
多线程的常用方法以及调度
测试Thread中的常用方法:start():启动当前线程;调用当前线程的run()run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中currentThread():静态方法,返回执行当前代码的线程getName():获取当前线程的名字setName():设置当前线程的名字yield():释放当前cpu的执行权join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执.原创 2021-10-23 09:10:56 · 110 阅读 · 0 评论