package com.day5.test;
/**
* User: Json
* Date: 2021/8/15
* * 多线程创建方式一 继承Thread
* * 1.创建一个继承于 thread类的字类
* * 2. 重写thread类的run方法 --> 把你要创建的线程要做的事情 写再 run方法中
* * 3. 创建thread类的子类对象
* * 4.通过此对象调用start方法
*
* 创建多线程方式二
* 1. 创建一个实现Runnable接口的类
* 2. 实现类去实现Runnable中的抽象方法 Run()
* 3. 创建实现类的对象
* 4. 将此对象作为参数传入到Thread类的构造器中 创建Thread类的对象
* 5. 通过Thread类的对象调用start()方法
*
* // 比较两种创建线程的方式
* 开发中 优先选择 方式二
* 原因 :1. 实现的方式没有类的单继承的局限性
* 例子: 比如 你有三个窗口同时卖票 如果用方式一去创建多线程
* 你就需要让 卖票这个类 继承 多线程这个类 才能实现同时卖票
* 但是 卖票这个类在实际开发中有可能会继承其他父类 这时候 就没办法 继承多线程这个类了
* 2. 实现的方式更适合来处理多个线程有共享数据的情况
*例子: 比如 你有三个窗口同时卖100张票 如果用方式一去创建多线程
* 你就需要声明票数这个变量 设置为静态属性 只有设置为静态属性 这样才能三个窗口同时卖这100张票
* 如果用方式二 你只需要在实现这个接口的类中 声明一个普通的 票数的变量 就可以解决这个问题
*
**/
class MyThread implements Runnable{
//* 2. 实现类去实现Runnable中的抽象方法 Run()
@Override
public void run() {
for (int i=0;i<=100;i++){
System.out.println(i);
}
}
}
public class Thread{
public static void main(String[] args) {
// * 3. 创建实现类的对象
MyThread myThread = new MyThread();
java.lang.Thread thread = new java.lang.Thread(myThread);
thread.start();
}
}练习 创建使用多线程 方式二
class MyWindow implements Runnable{
private int num=100;
@Override
public void run() {
while (true){
if(num>0){
System.out.println(java.lang.Thread.currentThread().getName()+"卖票 票号为"+num);
num--;
}else{
break;
}
}
}
}
public class Window {
public static void main(String[] args) {
MyWindow myWindow = new MyWindow();
java.lang.Thread thread = new java.lang.Thread(myWindow);
thread.setName("窗口1");
thread.start();
java.lang.Thread thread1 = new java.lang.Thread(myWindow);
thread1.setName("窗口2");
thread1.start();
java.lang.Thread thread2 = new java.lang.Thread(myWindow);
thread2.setName("窗口3");
thread2.start();
}
}
















