学习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;
}