多线程的练习代码 01
多线程的练习代码 01
创建多线程的第一个方式 继承Thread类
/*
Thread:
1.创建多线程的第一个方式
2.Thread类你的常用的方法:
2.1 getName();
2.2 setName();
2.3 start():开启一个线程并调用响应的run()执行
2.4 run();
2.5 yield(); “贡献”出当前线程对cpu的获取
2.6 join(); 在a线程中调用b线程的join()方法,那么当b线程完全执行完以后,a线程才可能开始执行
*/
//1. 声明类继承Thread类
class myThread extends Thread{
//2.重写run()方法,这是创建的多线程的执行的主体
public void run(){
for(int i=1;i<101;i++){
System.out.println(Thread.currentThread().getName()+": "+i);
}
}
}
public class aduoxiancheng {
public static void main(String[] args) {
//3.创建继承Thread类的子类的实例
myThread m1 = new myThread();
myThread m2 = new myThread();
//线程命名
//myThread m1 = new myThread("线程1");
//myThread m2 = new myThread();
m2.setName("线程2");
//4.调用对象的start()方法: ①启动线程 ②调用响应线程对应类的run()方法
m1.start(); //再次 m1.start(); 就会返回非法的线程状态异常
m2.start();
//不可以直接用run()方法,并没有新开线程、
for (int i=1;i<=100;i++){
if(i%10==0){
Thread.yield(); //yield(); 贡献出当前线程的执行权
}
System.out.println(Thread.currentThread().getName()+": "+i);
}
}
}
/**
* 三个窗口一起卖100张票
*/
class Ticket extends Thread{
static int ticket =100;
public void run(){
while(true){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"售票,票号位:" + ticket--);
}
}
}
}
public class TestTicket {
public static void main(String[] args) {
Ticket t1 = new Ticket();
Ticket t2= new Ticket();
Ticket t3 = new Ticket();
t1.setName("t1窗口");
t2.setName("t1窗口");
t3.setName("t1窗口");
t1.start();
t2.start();
t3.start();
}
}
创建多线程的第二种方式:实现Runnalble接口
/**
* 开启三个窗口买票
*
* 创建多线程的第二种方式:实现Runnalble接口
*/
//1. 创建实现Runnable接口的类
class Ticket1 implements Runnable{
int ticket =100;
//2. 重写Runnable接口中的抽象方法
public void run(){
while(true){
if(ticket>0){
System.out.println(Thread.currentThread().getName() + "售票,票号位:" + ticket--);
}
}
}
}
public class TestTicket1 {
public static void main(String[] args) {
//3. 创建一个实现接口的子类对象
Ticket1 t = new Ticket1();
//4. 将创建的子类对象作为形参传递给Thread类的构造器
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
t1.setName("t1窗口");
t2.setName("t2窗口");
t3.setName("t3窗口");
t1.start();
t2.start();
t3.start();
}
}