package com.zxf.demo;
/*
* 多线程的实现方式两种?
* 一、.实现 runnable 接口
* 2.重写run方法 Run():当一个线程启动后,就会自动执行该方法
* 3.在主方法中new一个 java 对象 Demo01 demo01=new Demo01();
* 4.将其放在 thread中 Thread t1=new Thread(demo01);
* 5.调用start方法 t1.start();
*
* 使用麻烦
* 避免了单继承的局限性
*
*二、继承Thread父类:
* 缺点:单继承的局限性
* 优点:使用方便
*
*
三、五种状态?
* 创建 就绪 运行 阻塞 死亡!
*
*
四、 常用方法?
* 1.setpriority(int newPriority) 更改优先级。增大可能性。【1-10】5
* 2.sleep (); 休息一会 让线程
* 3.void join(); 强制的让某一个线程 先执行完 类似于插队的效果!
* 4.thread.yield(); 礼让的方法,让当前线程礼让别的线程,有可能成功。和join的方法很像。
* 5.void interrupt() 中断线程
* 6.boolean isAlive() 测试线程是否处于活动状态
* 7.Thread.currentThread().getName() 获得该线程的名字
*
五、线程同步的问题?
解决方法 1.同步方法
2.同步代码块
六、启动一个线程是run()还是start()?它们的区别?
Start方法是将线程启动起来,遵循生命周期的运行流程的,
按照该方法启动的线程才可以轮番被cpu调度,随机执行,
但是run方法就是一个普通方法,若调用该方法,就没有将该线程进去启动,也就没有线程运行的先决条件了,
所以该线程就不会再轮番的被cpu进行调度了
*/
public class Demo01 implements Runnable{
@Override
public void run() {
for (int i = 0; i <30; i++) {
System.out.println("当前运行的线程:"+Thread.currentThread().getName()+"----"+i);
}
}
public static void main(String[] args) {
Demo01 demo01=new Demo01();
Demo01 demo02=new Demo01();
//创建了你定义的线程类的线程对象。
Thread t1=new Thread(demo01); //默认名字 Thread-0
Thread t2=new Thread(demo02, "哈哈"); //给线程 起名字
t1.start();
t2.start();
}
}