题目:http://wenku.baidu.com/view/d66187aad1f34693daef3e8a.html 启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC.... 本文分别使用wait.nofity和Semaphore来实现: wait.nofity版本 public class TestThread { public static void main(String[] args) { new Thread(new OrderThread(0,'A')…
Java多线程间通讯 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同. 1.使用wait()和notify()方法在线程中通讯 需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现写一个,读一个操作. class User { public String name; public String sex; // 读写标志(true:表示已经写入|false:表示未写入) public boolean flag = false; @Override pu…
1.1. 什么是线程安全 如果有多个线程同时运行同一个实现了Runnable接口的类,程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的:反之,则是线程不安全的. 1.2. 问题演示 为了演示线程安全问题,我们采用多线程模拟多个窗口同时售卖<肥潘大战猪八戒>电影票. 1.2.1.   第一步:创建售票线程类 package com.thread; /** * @Auther: lanhaifeng * @Date: 2019/11/20 0020…
这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 线程的几种状态 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待.计时等待.阻塞看成阻塞一个状态了 1.新建状态(new):使用 new 创建一个线程,仅仅只是在堆中分配了内存空间 新建状态下,线程还没有调用 start()方法启动,只是存在一个线程对象而已 Thread t = new Thread();//这就是t线程的新建状态 2.可运行状态(runnab…
两种实现线程同步的方法 方法 特性 synchronized 不需要显式地加解锁,易实现 ReentrantLock 需要显式地加解锁,灵活性更好,性能更优秀,结合Condition可实现多种条件锁 下文用三种不同的方式实现生产者/消费者模型 synchronized结合wait/notify/notifyAll ReentrantLock结合Condition BlockingQueue(内部仍然采用ReentrantLock实现) import java.util.Stack; import…
线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处于创建状态. 处于创建状态的线程只是一个空的线程对象,系统不为它分配资源. 2.可运行状态: 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体--run()方法,这样就使得该线程处于可运行状态(Runnable). 这一状态并不是运行中状态(Running),因为线程…
方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态. 线程启动后,只要没有运行完毕,都会返回true. [注]如果只是要等其他线程运行结束之后再继续操作,可以执行t.join(),即:在t执行完毕前挂起. 方法2:通过Thread.activeCount()方法判断当前线程的线程组中活动线程的数目,为1时其他线程运行完毕. 方法3:通过java.util.concurrent.Executors中的方法创建一个线程池,用这个线程池来启动线程.启动所有要启动的线程后,执行…
剑指Offer--迅雷笔试题+知识点总结 情景回顾 时间:2016.9.19 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:迅雷笔试 总体来说,迅雷笔试内容体量不算多,主要分为30道选择题,2道编程题,半小时将选择题做完,1个半小时两道编程题一道29%,一道超时.关键是第二道编程题直接输出错误语句居然通过17%!也是醉了,绝对的判题系统BUG. 知识点回忆 希尔排序 给定一数组元素{50,40,95,20,15,70,60,45},经过一趟希尔排序(参考博文<剑指Of…
一.线程安全 多个线程在执行同一段代码的时候,每次的执行结果和单线程执行的结果都是一样的,不存在执行结果的二义性,就可以称作是线程安全的. 讲到线程安全问题,其实是指多线程环境下对共享资源的访问可能会引起此共享资源的不一致性.因此,为避免线程安全问题,应该避免多线程环境下对此共享资源的并发访问. 线程安全问题多是由全局变量和静态变量引起的,当多个线程对共享数据只执行读操作,不执行写操作时,一般是线程安全的:当多个线程都执行写操作时,需要考虑线程同步来解决线程安全问题. 二.线程同步(synchr…
java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Runnable接口来实现java多线程, 都得不到线程执行后的结果. 要想得到线程执行后的结果,就需要使用ExecutorService, Callable, Future来实现java多线程. 可返回值的任务必须实现Callable接口, 类似的, 无返回值的任务必须实现Runnable接口. 执行…