package 线程_172_线程创建2_接口_Runnable;
/**
- 推荐使用Runnable 创建线程
- 1.避免单继承的局限性;
- 2.便于共享资源
- 使用Runnable创建线程
- 1.类 实现Runnable接口+重写run()方法–>真实角色类
- 2.启动多线程:使用静态代理
-
1)创建真实角色
-
2)创建代理角色
-
3)调用.start()方法;即启动线程
/
// Programmer程序员;implements工具;Runnable可运行
public class Programmer implements Runnable{
//线程体
@Override//重写
public void run() {//真实角色类
//写进东西
for(int i=0;i<10;i++){
System.out.println(“一边敲代码…”);
}
}
}
//----------------------------------------------
package 线程_172_线程创建2_接口_Runnable;
/*
- 应用
-
1)创建真实角色
-
2)创建代理角色
-
3)调用.start()方法;即启动线程
*/
public class ProgrammerApp {
public static void main(String[] args) {
//1.创建真实角色
Programmer pro = new Programmer();
//2.创建代理角色
Thread proxy = new Thread(pro);//proxy代理人
//3.调用.start()方法;即启动线程
proxy.start();//这是一条路径
for(int i=0;i<10;i++){//另外一条路径
System.out.println("一边qq聊天.....");
}
}
}
//结果-------------------------------
//-----------------------------------------------------------
package 线程_172_线程创建2_接口_Runnable;
/**
- 方便共享资源 如:抢票系统
- 这节课小结:
- 一.继承Thread+run()
-
启动: 创建子类对象+对象.start方法
- 二.实现Runnable+run()方法
-
启动:使用静态代理
-
1.创建真实角色
-
2.创建代理角色Thread+引用
-
3.代理角色.start()
- 推荐使用接口 Runnable 创建线程
-
1.避免单继承的局限性
-
2.便于共享资源
*/
public class Web12306 implements Runnable{//Web网
private int num = 50;
//重写run方法
@Override
public void run() {
while(true){
if(num<=0){
break;//跳出循环
}
//Thread.currentThread().getName()获取当前线程的名称
System.out.println(Thread.currentThread().getName()+“抢到了”+num–);
}
}
public static void main(String[] args) {
//真实角色
Web12306 web = new Web12306();
//添加代理
Thread t1 = new Thread(web,“张三”);
Thread t2 = new Thread(web,“李四”);
Thread t3 = new Thread(web,“王五”);
//启动线程
t1.start();
t2.start();
t3.start();
}
}
//结果--------------------------------------------------