java之多线程的使用

1. 设计两个线程,一个线程负责求出1-100以内所有的偶数;然后,另外一个线程负责打印1-100以内所有的奇数。测试时,分别设置线程的优先级,观察执行的顺序。

奇数线程

package com.qf.home;

public class JiThread extends Thread {
	@Override
	public void run() {
		for (int i = 1; i < 101; i++) {
			if(i % 2 != 0){
				System.out.println(Thread.currentThread().getName() + "===" + i);
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

偶数线程

package com.qf.home;

public class OuRunnable implements Runnable {
	@Override
	public void run() {
		for (int i = 1; i < 101; i++) {
			if(i % 2 == 0){
				System.out.println(Thread.currentThread().getName()+"==="+i);
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

测试

package com.qf.home;
/*1. 设计两个线程,一个线程负责求出1-100以内所有的偶数;然后,另外一个线程负责打印1-100以内所有的奇数。
测试时,分别设置线程的优先级,观察执行的顺序。*/
public class Home1 {
	public static void main(String[] args) {
		JiThread j1 = new JiThread();
		Thread o1 = new Thread(new OuRunnable()); 
		j1.setPriority(Thread.MAX_PRIORITY);
		o1.setPriority(Thread.MIN_PRIORITY);
		j1.start();
		o1.start();
	}
}

2. 实现一个线程,用于扫描某个目录下的所有文本文件(包括:java、txt、html),并将文字内容打印出来。

package com.qf.home;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

/*2. 实现一个线程,用于扫描某个目录下的所有文本文件(包括:java、txt、html),
并将文字内容打印出来。*/
public class Home2 {
	public static void main(String[] args) {
		new Thread(() -> {
			File file = new File("C:/Users/Administrator/Desktop/a");
			readFile(file);
		}).start();

	}

	public static void readFile(File f) {

		if (f.isDirectory()) {
			File[] files = f.listFiles();
			if (files != null) {
				for (File file : files) {
					readFile(file);
				}
			}
		} else {
			System.out.println(f.getName());
			//读文件
			try {
				//得到文件
				//得到文件读取的字符流
				FileReader fileReader = new FileReader(f);
				//得到带缓冲字符流
				BufferedReader bufferedReader = new BufferedReader(fileReader);
				String readLine = null;
				while((readLine = bufferedReader.readLine()) != null){
					System.out.println(readLine);
				}
				//字节流
//				int ch = -1;
//				while((ch = bufferedReader.read()) != -1){
//					System.out.println((char)ch);
//				}
				fileReader.close();
				bufferedReader.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}

	}

}

3. 某人正在看电视连续剧,从第1~88集,看到第10集时,来了一个送快递的,收完快递后后,继续看电视。

package com.qf.home;


/*3. 某人正在看电视连续剧,从第1~88集,看到第10集时,来了一个送快递的,收完快递后后,继续看电视。*/
public class Home3 {
	public static void main(String[] args) {
		new Thread(() -> {
			for (int i = 1; i < 89; i++) {
				System.out.println(Thread.currentThread().getName() + "===" + "看到了第" + i + "级");
				try {
					Thread.sleep(300);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
				if (i == 10) {
					Thread t1 = new Thread(new Runnable() {
						@Override
						public  void run() {
							System.out.println(Thread.currentThread().getName() + "===" + "送快递的来了");
							try {
								Thread.sleep(5000);
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
							System.out.println(Thread.currentThread().getName() + "===" + "快递拿完了");
						}
					});
					t1.start();
					try {
						t1.join();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();// 启动
//		thread.setDaemon(true);// 设置守护线程
	}

}

4. 多线程模拟龟兔赛跑:

乌龟和兔子进行1000米赛跑,兔子前进5米,乌龟只能前进1米。
但兔子每20米要休息500毫秒,而乌龟是每100米休息500毫秒。
谁先到终点就结束程序,并显示获胜方

package com.qf.home;


/*4. 多线程模拟龟兔赛跑:
乌龟和兔子进行1000米赛跑,兔子前进5米,乌龟只能前进1米。
但兔子每20米要休息500毫秒,而乌龟是每100米休息500毫秒。
谁先到终点就结束程序,并显示获胜方*/
public class Home4 {
	public static void main(String[] args) {
		// TuThread t = new TuThread();
		// Thread w = new Thread(new WuRunnable());
		// t.start();
		// w.start();
		Result r = new Result();
		new Thread(() -> {
			for (int i = 1; i <= 1000; i++) {
				System.out.println("乌龟跑了" + i + "米");
				try {
					Thread.sleep(1);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
				if (i >= 1000) {
					r.isWin = true;
					System.out.println("乌龟胜利了" + i);
					break;
				}
				if (i % 100 == 0) {
					try {
						System.out.println("乌龟在"+i+"米处开始休息");
						Thread.sleep(500);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		
		new Thread(() -> {
			int m = 0;
			for (int j = 1; j <= 200; j++) {
				if(r.isWin){
					System.out.println("兔子跑了" + m + "米............");
					break;
				}
				m += 5;
				System.out.println("兔子跑了" + m + "米");
				try {
					Thread.sleep(1);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
				if (m >= 1000) {
					System.out.println("兔子胜利了" + j);
					
				}
				if (m % 20 == 0) {
					try {
						System.out.println("兔子在"+j*5+"米处开始休息");
						Thread.sleep(500);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();

	}

}
class Result{
	boolean isWin = false;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值