学习笔记3: java中线程的简单实现

附上代码段:

public class DemoThread3 {

	/**
	 * @author 牧羊的伯格女皇
	 * @param args
	 * 2015-10-15
	 * 模拟猫和狗的线程,共享房屋中的一桶水。即房屋是线程的目标对象。
	 * 当水被喝完后 猫和狗 进入死亡状态 
	 */
	public static void main(String[] args) {
		House house = new House();
		house.setWaterAmount( 10 );
		Thread dog;  //用Thread 声明线程 
		Thread cat;
		dog = new Thread( house ); //  dog 和 cat 的目标对象相同 都是house 
		cat = new Thread( house ); //  
		dog.setName("狗");  // 改变线程名称,使之与参数name相同
		cat.setName("猫");
		dog.start();   // 启动线程 
		cat.start();
	}

}

public class House implements Runnable {
	private int waterAmount;
	public void setWaterAmount(int waterAmount) {
		this.waterAmount = waterAmount;
	}
	@Override
	public void run() {
		while(true){
			// currentThread() : 返回对当前正在执行的线程对象的引用。
				// getName()  返回该线程的名称。 
			String name = Thread.currentThread().getName();
			if(name.equals("狗")){
				System.out.println( name + " 喝水");
				waterAmount = waterAmount - 2;
			}else if( name.equals("猫")){
				System.out.println( name +" 喝水");
				waterAmount = waterAmount -1;
			}
			System.out.println(" 还剩余 : " + waterAmount );
			try {
				Thread.sleep(2000);  // 间隔时间   进入中断状态 
			} catch (InterruptedException e) {
				//当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常。
				e.printStackTrace();
			}
			if( waterAmount <=0 ){
				return;
			}
		}
	}

}
时间: 2024-10-14 22:18:05

学习笔记3: java中线程的简单实现的相关文章

多线程(三) java中线程的简单使用

============================================= 原文链接:多线程(三) java中线程的简单使用 转载请注明出处! ============================================= java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依旧是实现了Runnabel接口.考虑到java的

【知了堂学习笔记】java中常用集合的理解

最近学习了java中常用集合类的一些知识,在这里作为一只小白,我来谈谈我的理解,顺带总结知识点. 引入:在没有接触之前,听到集合,给我感觉是想到了数学中的集合一样,里面存放着一个一个的元素.其实不然,这个集合也就差不多,是用来存放元素的容器. Java中的集合类包含的内容很多而且很重要,很多数据的存储和处理(排序,去重,筛选等)都需要通过集合类来完成. 今天我要谈的主要是,如下图所示: 1.Collection Collection是最基本的集合类型,若要检查Collection中的元素,可以使

【JAVA学习笔记】Java中的static关键字解析

Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnb

【学习笔记】Java中生成对象的5中方法

概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.reflect.Constructor类的newInstance()实例方法. 4.调用对象的clone()方法. 5.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法. 一.使用new关键字 这是最常见也是最简单的创建对象的方式了.通过这种方式

【Java基础学习笔记】Java中Socket+Swing设计简单通信

在<Java从入门到精通(第3版)>的原书中,客户端仅能发送一次数据,我在此基础上修改了一点点,实现了多次发送数据的单向通讯. 1. 服务器端 package Tcp_IP; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.sq

Java并发编程学习笔记(一)线程安全性 1

什么是线程安全性: 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问."共享"意味着变量可以由多个线程同时访问,而"可变"则意味着变量的值在其生命周期内可以发生变化. 一个对象是否需要线程安全的,取决于他是否被多个线程访问.这指的是在程序中访问对象的方式,而不是对象要实现的功能.要使得对象时线程安全的,需要采用同步机制来协同对对象可变状态的访问.如果无法实现协同,那么可能导致数据破坏以及其他不该出现的结果. 如果当多个线程访

疯狂Java学习笔记(62)------------线程初识

线程初识 没有线程编程的程序好比一个人一只手干活,而多线程的程序就好比一个人多只手干活. 进程是系统资源分配的独立单位,而线程是可调度运行的独立单位,一个进程可以拥有多个线程,线程是进程并行完成的多个任务. 进程.线程.并发执行 首先我们先来认识一下进程.线程.并发执行的概念: 一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程.启动进程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序是在内存中运行的. 在进程中,有些程序流程块是可以乱序执行的,并

Java线程学习笔记(二) 线程的异常捕捉

线程异常的捕捉: 正常的情况下,我们在main()方法里是捕捉不到线程的异常的,例如以下代码: public class ExceptionThread implements Runnable{ @Override public void run() { throw new NullPointerException(); } public static void main(String[] args) { ExecutorService executorService = Executors.n

疯狂Java学习笔记(65)---------线程协作

线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去.因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,