本案例描述的是,给一辆汽车打蜡.抛光的场景. Car 是一辆被打蜡抛光的汽车,扮演共享资源的角色. WaxOnCommand 负责给汽车打蜡,打蜡时需要独占整部车,一次打一部分蜡,等待抛光,然后再打一部分蜡. BuffCommand 负责给汽车抛光,抛光时需要独占整部车,每一次会将刚打上的蜡抛光,然后等待打蜡,然后再将刚打上的蜡抛光. WaxOnCommand .BuffCommand 分别由两个线程相互交替地执行: WaxOnCommand 打蜡.等待抛光,BuffCommand 抛光,等待打…
在多线程环境下,通过 BlockingQueue,实现生产者-消费者场景. Toast 被生产和消费的对象. ToastQueue 继承了 LinkedblockingQueue ,用于中间存储 Toast . Producer 生产 Toast ,并将生产出来的 Toast 放进队列 initialToastQ 中. Processor 加工 Toast,从 initialToastQ 中获得生产出来的 Toast,将其加工并放进队列 finishedToast 中. Consumer 消费…
概述: 用来实现网络互连的 不同的计算机上 运行的程序间 可以进行数据交互  也就是用来在不同的电脑间, 进行数据传输. 三大要素: IP地址: 设备(电脑,手机,ipad)在网络中的唯一标识. 组成: 网络(网关)号码 + 主机地址. //192.168.162.86 分类: 城域网: 1 + 3 广域网: 2 + 2 局域网: 3 + 1 //192.168.0. + 1 两个特殊的IP: 127.0.0.1: 本地回环(回路)地址, 在哪台电脑上写这个ip, 它就标识哪个电脑. 255.2…
作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39341887 本文演示,一个简单的多线程实例,并简单分析一下线程. 编程多线程时,一般步骤: 1)继承Thread函数. 2)覆盖run函数. 注意:1)main函数为主线程,main里面存放的是主线程的运行代码: Demo1为子线程,里面的run函数里面存放的是子线程须要运行的代码:当中,本文中主线程和子线程运行的优先级是一样的. 2)启动线程必须用start()启动,…
作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39347245 本文演示,Tread多线程实现Runnable接口,以及简单的说明为什么有这样的创建线程的方法. 一.创建线程的2中方法: 1)继承Thread类实现多线程,參见我的上一篇文章:Java Tread多线程(0)一个简单的多线程实例 : 2)另外一种方法就是实现Runnable接口,创建一个新线程. 二.为什么要有这两种方法创建线程呢? ①主要原因:就是方法1…
1. 背景 java.util.concurrent.atomic这个包是非常实用,解决了我们以前自己写一个同步方法来实现类似于自增长字段的问题. 在Java语言中,增量操作符(++)不是原子的,也就是非线程安全的:在使用的时候,要保证数据同步,就需要使用类似于synchronized关键字等手段来保证数据正确.正因为如此,<Java:多线程,线程同步,synchronized关键字的用法(同步代码块.非静态同步方法.静态同步方法)>一文中用synchronized关键字来实现一个自增长的字段…
Java的多线程 简单入门 首先能够先搞清楚什么是程序.进程.线程,以及它们之间的关系: 定义: 一 程序仅仅是一组指令的有序集合.它是静态的 二 进程是具有一定独立功能的程序关于某个数据集合上的一次执行活动,是系统进行资源分配和调度的一个独立单位. 三 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立执行的基本单位.线程自己基本上不拥有系统资源,仅仅拥有一点在执行中不可缺少的资源(如程序计数器,一组寄存器和栈),一个线程能够创建和撤销还有一个线程: 进程与线程差别与联…
前言 这一系列多线程的文章,一方面是个人对Java现有的多线程机制的学习和记录,另一方面是希望能给不熟悉Java多线程机制.或有一定基础但理解还不够深的读者一个比较全面的介绍,旨在使读者对Java的多线程有一个递增.全面和较深刻的理解,所以在第一部分就集中介绍一些概念和原理,表面看来这些对多线程的使用没有太多关系,但理解这些概念/原理对理解多线程是至关重要的,因为Java的多线程并非是完全独自实现的,它依赖于操作系统命令.CPU机制,并且随着这些基础软硬件的发展而发展,所以请有意向对多线程全面理…
目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方法默认是当前对象this,对于同步代码块,需要指定锁对象 对于整个同步方法或者代码块,不再需要显式的进行加锁,默认这一整个范围都是在锁范围内 可以理解为,隐含的在代码开始和结尾处,进行了隐式的加锁和解锁 所以synchronized又被称为隐式锁 对于synchronized关键字的隐式锁,不需要显…
Java的多线程实现生产/消费模式 在Java的多线程中,我们经常使用某个Java对象的wait(),notify()以及notifyAll() 方法实现多线程的通讯,今天就使用Java的多线程实现生产/消费模式,需求如下: 线程A ProductThread 继承Thread 实现生产数据 若线程共享的数据不为NULL,则生产线程进入等待状态 线程B CustomThread 继承Thread 实现消费数据(输出到控制台) 当线程共享数据为NULL的时候,进入等待状态 线程B 消费完数据之后,…