随笔分类 - 【JAVA基础-多线程】
摘要:new Thread(){代码…}.start(); new Thread(new Runnable(){代码…}).start(); 例子1: 匿名内部类的格式: new 类名或者接口名() { 重写方法; }; 本质:是该类或者接口的子类对象。 执行结果:
阅读全文
摘要:多线程实现的方式三: A:创建一个线程池对象,控制要创建几个线程对象。 public static ExecutorService newFixedThreadPool(int nThreads) B:做一个类实现Callable接口。 C:调用如下方法即可 Future<?> submit(Run
阅读全文
摘要:程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线 程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使 用线程池。 线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态, 等待下一个对象来使用。 在JDK5 之前,我们必
阅读全文
摘要:Java 中使用ThreadGroup 来表示线程组,它可以对一批线程进行分类管理,Java 允许程 序直接对线程组进行控制。 默认情况下,所有的线程都属于主线程组。 我们也可以给线程设置分组:对一个线程组进行操作,如将一个线程组设置为守护线程,获取线程组的最大优先级等。
阅读全文
摘要:在线程安全解决之后,还是一样存在着如下的问题: A:如果消费者先抢到CPU的执行权,就会去消费数据,但是现在的数据是默认值,没有意义,应该等着数据有意义,再消费。 B:如果生产者先抢到CPU的执行权,就会去生产数据,但是呢,它生产完数据后,还继续拥有执行权,它又继续产生数据。这是有问题的,它应该等着
阅读全文
摘要:针对同一个资源的操作有不同种类的线程:生产线程和消费线程 执行结果: 分析: 资源类:Student 设置学生数据:SetThread(生产者) 获取学生数据:GetThread(消费者) 测试类:StudentTest 问题一:执行测试类,发现输出结果是null 0 原因:我们在每个线程中都创建了
阅读全文
摘要:同步弊端: 1.效率低(可接受) 2.如果出现了同步嵌套,有可能产生死锁问题(不可接受) 死锁问题: 是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待的现象
阅读全文
摘要:虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁. 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock,而ReentrantLock是Lock的实现类.
阅读全文
摘要:同步方法:就是把同步关键字加到方法上 同步方法的锁对象是什么呢?this(不信可以试试把下面的this换成其它对象) 如果是同步静态方法,那么锁对象就不是this了,而是类的class文件。
阅读全文
摘要:为什么会出现线程安全的问题?(拿来判断是否有线程安全问题的标准) 1.是否是多线程环境 2.是否有共享数据 3.是否有多条语句操作共享数据 如何解决线程安全问题? 让程序运行在线程安全的环境中 怎么实现? 1.共享数据只造一个 2.把多个语句操作共享数据的代码给锁起来,让任意时刻只能有一个线程执行即
阅读全文
摘要:我们来用最经典的卖票的案例,表明两种实现方式的区别,同时分析线程不安全产生的原因 一、继承Thread类 二、实现Runnable接口 启动线程 可以看到,二者的主要区别是: 1.实现Runnable接口的方式可以避免由于JAVA单继承带来局限性 2.实现Runnable接口的方式,适用多个相同程序
阅读全文
摘要:线程的生命周期: 新建:创建线程对象。 就绪:有执行资格,没有执行权。 运行:有执行资格,有执行权。 阻塞:由于一些操作让线程处于了该状态。没有执行资格,没有执行权。而另一些操作却可以把它给激活,激活后处于就绪状态。 死亡:线程对象变成垃圾,等待被回收。
阅读全文
摘要:线程停止:中断线程。 把线程的状态终止,并抛出一个InterruptedException。 运行结果:
阅读全文
摘要:线程守护:当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。 运行结果之一:
阅读全文
摘要:线程礼让:暂停当前正在执行的线程对象,并执行其他线程。 运行结果
阅读全文
摘要:线程休眠 public static void sleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 线程加入 public final void join():等待该线程终止。 线程礼让 public sta
阅读全文
摘要:实现Runnable接口来实现多线程 : A:自定义类MyRunnable实现Runnable接口 B:重写run()方法 C:创建MyRunnable类的对象 D:创建Thread类的对象,并把C步骤的对象作为构造参数传递 package com.shusheng.tihuzhai.test; /
阅读全文

浙公网安备 33010602011771号