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(); }}