多线程

java中要想实现多线程,有两种手段,一种是继承Thread类,另外一种是实现Runable接口。

继承Thread类重写run方法

public class ThreadDemo1 {
     public static void main(String[] args){
         Demo d = new Demo();
         d.start();
         for(int i=0;i<60;i++){
             System.out.println(Thread.currentThread().getName()+i);
         }

     }
 }
 class Demo extends Thread{
     public void run(){
         for(int i=0;i<60;i++){
             System.out.println(Thread.currentThread().getName()+i);
         }
     }
 }

实现Runnable接口重写run方法

public class ThreadDemo1 { public static void main(String[] args){ Demo d = new Demo(); new Thread(d).start(); for(int i=0;i<60;i++){ System.out.println(Thread.currentThread().getName()+i); } } } class Demo implements Runnable{ public void run(){ for(int i=0;i<60;i++){ System.out.println(Thread.currentThread().getName()+i); } } }
多线程的常用方法

object.wait():

在其他线程调用此对象的notify()或者notifyAll()方法前,线程一直处于休眠状态

Thread.sleep():

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。监控状态依然保持、会自动恢复到可运行状态,不会释放对象锁

 thread.join():

 在一个线程对象上调用,使当前线程等待这个线程对象对应的线程结束。

 Thread.yield():暂停当前正在执行的线程对象,并执行其他线程。

 thread.interrupt()

   中断线程,停止其正在进行的一切。中断一个不处于活动状态的线程不会有任何作用。

   如果线程在调用Object类的wait()方法、或者join()、sleep()方法过程中受阻,则其中断状态将被清除,并收到一个InterruptedException。

 Thread.interrupted():检测当前线程是否已经中断,并且清除线程的中断状态(回到非中断状态)。

 thread.isAlive():如果线程已经启动且尚未终止,则为活动状态。

 同步与死锁

 在多线程中如何找到安全问题所在:
  1,明确哪些代码是多线程运行代码  
  2,明确共享数据
  3,明确多线程运行代码中哪些代码是操作共享数据的

原文地址:https://www.cnblogs.com/54ljj/p/5405921.html