多线程的使用

多线程的一道简单的题目

创建两个线程,一个模拟cpu,一个模拟显卡

cpu处理数据是 每秒8M,显卡处理数据是每秒2M

当CPU处理数据总量比显卡多10M以上的时候,CPU等待显卡处理数据

直到显卡处理数据总量比CPU数据小于等于5的时候,CPU继续处理数据

第1秒, cpu处理数据8m, 显卡处理数据2m
第2秒, cpu处理数据16m, 显卡处理数据4m
第3秒, cpu处理数据16m, cpu等待显卡处理数据, 显卡处理数据6m
第4秒, cpu处理数据16m, cpu等待显卡处理数据, 显卡处理数据8m
第5秒, cpu处理数据16m, cpu等待显卡处理数据, 显卡处理数据10m
第6秒, cpu处理数据16m, cpu等待显卡处理数据, 显卡处理数据12m
第7秒, cpu处理数据24m, 显卡处理数据14m

第8秒, cpu处理数据24m, cpu等待显卡处理数据, 显卡处理数据16m


直接上代码吧

package Thred;

public class test {

	private static int xiankaShu = 0;//显卡处理量
	private static int cpuShu = 0;//cpu处理量
	private static int s = 1;//标记
	private static int  num=1;//时间计数

	public static void main(String[] args) {
        
		final Buess buess = new Buess();
		new Thread(new Runnable() {

			@Override
			public void run() {
				while (true) {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.print("第"+(num++)+"秒, ");
					buess.cpu();
				}
			}
		}).start();

		new Thread(new Runnable() {

			@Override
			public void run() {
				while (true) {

					buess.xianka();

				}
			}
		}).start();
	}

	static class Buess {
		boolean cpuShould = true;

		private synchronized void cpu() {
			if (!cpuShould) {
				try {
					this.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (cpuShu - xiankaShu >= 10 || s == 0) {
				s = 0;
				System.out.print("cpu处理数据" + cpuShu + "m, cpu等待显卡处理数据, ");
				cpuShould = false;
				this.notify();
				return;

			}

			cpuShu += 8;
			System.out.print("cpu处理数据" + cpuShu + "m, ");
			cpuShould = false;
			this.notify();
		}

		private synchronized void xianka() {

			if (cpuShould) {
				try {
					this.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

			xiankaShu += 2;
			System.out.println("显卡处理数据" + xiankaShu + "m");

			if (cpuShu - xiankaShu <= 5) {
				s = 1;
			}
			cpuShould = true;
			this.notify();
		}

	}

}
入门的多线程题目,本人也才在学习,有不好的地方请指出

你可能感兴趣的:(java多线程)