🍜Thread线程🍤
🍤1、龟兔赛跑
比赛规则:
模拟龟兔赛跑 兔子每跑十步休息10毫秒,乌龟正常跑,只要有参赛者中有一个跑了100步就结束。
- 思路创建一个线程,实现两者的跑步,通过线程的名字区分实现两者的线程实现
public class Thread04 implements Runnable {
//定义一个变量判断比赛情况
String gameOver=null;
@Override
public void run() {
for ( int step = 1; step <=100; step++) {
//如果线程名字是兔子直接运行if里的内容否则就是乌龟
if("兔子".equals(Thread.currentThread().getName())&&step%10==0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"跑第"+step+"步");
if(isOk(step)){
//此处不能打印出胜利信息,会出现两者都胜利的情况
//System.out.println(Thread.currentThread().getName()+"获胜");
break;
}
}
}
//判断方法
private boolean isOk(int step) {
if(gameOver!=null){
return true;
}
if(step==100){
gameOver=Thread.currentThread().getName();
System.out.println(Thread.currentThread().getName()+"获胜");
return true;
}
return false;
}
//测试
public static void main(String[] args) {
Thread04 t4=new Thread04();
new Thread(t4,"兔子").start();
new Thread(t4,"乌龟").start();
}
}
结果:
主要难点,别忘记是两个线程,只关到100步的另一个还是会执行跑到100步
🍤2、静态代理
代理模式 :
静态代理 动态代理静态代理:
真实角色
代理角色
要求:
1.代理角色与真实角色实现相同的接口
2.代理角色持有真实角色的引用
3.代理行为
举例:买房
public class Static02 {
public static void main(String[] args) {
//通常写法
Customer cs=new Customer();
Medium med=new Medium(cs);//静态代理
med.look();
System.out.println("-------------------");
new Medium(new Customer()).look();
}
}
//买房看房
interface House{
//看房功能
void look();
}
//中介
class Medium implements House{
private Customer cus=null;
public Medium(Customer c){
//初始化
this.cus=c;
}
@Override
public void look() {
System.out.println("询问客户的需求~~");
System.out.println("寻找用户所需房源~~");
cus.look();
System.out.println("决定签单~~~");
}
}
//客户
class Customer implements House{
@Override
public void look() {
System.out.println("决定买房~~~");
}
}
🍤3、内部类创建线程
- 静态内部类创建线程
- 局部匿名类创建线程
public class Thread06 {
//静态内部类
static class inner implements Runnable{
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println("aaaaaaaaaa");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
Thread06.inner ti=new Thread06.inner();
new Thread(ti).start();
//局部匿名类
new Thread(()->{
for (int i = 0; i <20 ; i++) {
System.out.println("bbbbbbbbbb");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}