java线程之线程通信
前面提到多线程操作会有一个资源共享问题。
日常生活中,对于一个超市,有供货商往超市运货,有消费者从超市取货,供货商和消费者都与超市
建立了某种连接,超市就相当于公共资源,而他们的这种行为放到线程上说就是----线程通信。
建立线程通信自然少不了公共资源类、至少两个操作线程、测试类。
1.公共资源类
public class Share {
String name;
String sex;
//线程A的任务,提供数据(同步方法)
public synchronized void product(String name,String sex) {
this.name = name;
this.sex = sex;
}
//线程B的任务,提取(显示)数据(同步方法)
public synchronized void show() {
System.out.println("姓名:"+this.name+";性别:"+this.sex );
}
}
因为供货商和消费者都会与超市建立连接,那么超市自然要知道他们各自的目的。
所以公共资源类中会定义各线程的操作方法(任务)。
2.线程A/B
public class Producter implements Runnable {
Share share = null;
// 构造方法为此线程和公共资源对象建立连接
public Producter(Share share) {
this.share = share;
}
@Override
public void run() {
// run方法定义了线程工作时的具体操作
share.product("Tom", "男");
}
} public class Customer implements Runnable {
Share share = null;
// 构造方法为此线程和公共资源对象建立连接
public Customer(Share share) {
this.share = share;
}
@Override
public void run() {
// run方法定义了线程工作时的具体操作
share.show();
}
}
由于线程A/B都是对公共资源对象的操作,那么就必须在线程内部引入公共资源对象,为后面的线程操作(run方法)提供对象。
3.测试类(开始工作)
public class Test {
public static void main(String[] args) {
//新建一个公共资源类对象share
Share share = new Share();
//创建线程A/B,并为其引入公共资源对象(构造器实现对象引入)
Producter product = new Producter(share);
Customer customer = new Customer(share);
//开启线程,二位开始上班
new Thread(product, "A").start();
new Thread(custmer, "B").start();
}
}
不难看出,控制台会打印出A线程传入的数据(姓名:Tom;性别:男)
java线程之线程通信的更多相关文章
- java多线程详解(6)-线程间的通信wait及notify方法
Java多线程间的通信 本文提纲 一. 线程的几种状态 二. 线程间的相互作用 三.实例代码分析 一. 线程的几种状态 线程有四种状态,任何一个线程肯定处于这四种状态中的一种:(1). 产生(New) ...
- java笔记--关于线程通信
关于线程通信 使用多线程编程的一个重要原因就是线程间通信的代价比较小 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897773.h ...
- Java多线程中线程间的通信
一.使用while方式来实现线程之间的通信 package com.ietree.multithread.sync; import java.util.ArrayList; import java.u ...
- Java多线程之线程的通信
Java多线程之线程的通信 在总结多线程通信前先介绍一个概念:锁池.线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池.每个对象都有自己的锁池的空间,用于放置等待运行的线程.这些 ...
- Java多线程编程-线程之间的通信
转载自:这里 学习了基础的线程知识 看到了 线程之间的通信 线程之间有哪些通信方式呢? 1.同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. public ...
- 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)
Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...
- java多线程与线程间通信
转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...
- Java 多线程(七) 线程间的通信——wait及notify方法
线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法和三个wait方法: http://docs.oracle.com/ ...
- 【转】Java学习---线程间的通信
[原文]https://www.toutiao.com/i6572378564534993415/ 两个线程间的通信 这是我们之前的线程. 执行效果:谁抢到资源,谁运行~ 实现线程交替执行: 这里主要 ...
- Java多线程之线程的状态以及线程间协作通信导致的线程状态转换
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6561589.html 一:线程的状态以及变化图 Java中线程中状态可分为五种:New(新建状态),Ru ...
随机推荐
- JAVA对象克隆可能会出现的问题
首先,区分一下拷贝和克隆: 拷贝:当拷贝一个变量时,原始变量与拷贝变量引用的是同一个对象.当改变一个变量所引用的对象,则会对另一个变量造成影响. 克隆:当克隆一个对象时,是重新的创建了和该对象内容相同 ...
- 简述Java内存泄露
翻译人员: 铁锚翻译时间: 2013年11月4日原文链接: The Introduction of Memory Leaks内存管理一直是Java 所鼓吹的强大优点.开发者只需要简单地创建对象,而Ja ...
- hello 内核模块
#ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # define MODULE #endif #include <lin ...
- windows与linux下的\r\n
\n 为ASCII的0x0a 换行 \r 为ASCII的0x0d 回车 在windows 系统中,当你输入回车时会自动变成\r\n 在l ...
- STL字符串常用方法扩展
前言 STL作为一个标准模版库,很多容器和算法都是很实用的,接口也相对比较友好,而且在实现上也比较轻量级.相对boost来说,要轻量得多,相对loki来说,使用的模版语法不会那么晦涩难懂,基本还是能看 ...
- Leetcode_137_Single Number II
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42877129 Given an array of inte ...
- 《java入门第一季》之面向对象面试题(成员变量与局部变量的区别)
/* 成员变量和局部变量的区别? A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生命周期不同 ...
- RTMPdump 使用说明
RTMPDump v2.4 2012-07-24RTMPDUMP(1) 名称 rtmpdump - (RTMP流媒体客户端)RTMP streaming media client 使用参数 rtmpd ...
- Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!
Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...
- 采用UltraISO制作U盘启动盘
采用UltraISO制作U盘启动盘 打开UltralSO,选择"文件"--->"打开",如下图: 图1 打开WIN7操作系统的ISO文件,如下图: 图2 ...