03-线程和锁

java中线程的实现

Java 中实现线程两种手段:

  • 一种是继承Thread类
  • 一种就是实现Runnable接口。
    public Thread(Runnable target);
    public Thread(Runnable target,String name)
    public Thread(String name)
    public static Thread currentThread()
    public final String getName()
    public final int getPriority()
    public boolean isInterrupted()
    public final boolean isAlive()
    public final void join() throws InterrruptedException //等待线程死亡,线程强制运行,其他等待
    public final synchronized void join(long millis) throws InterruputedException
    public final void setName(String name)
    public final void setPriority(int newPriority)
    public static void sleep(long miils) throws InterruptedException
    public String toString()
    public static void yield()//目前正在执行暂停,允许其他执行
    public final void setDaemon(boolean on)
  • 3种优先级

    public static final int MIN_PRIORITY ->1
    public static final int NORM_PRIORITY ->5
    public static final int MAX_PRIORITY  ->10
    
  • 继承Thread类

    class Mythread extends Thread{
        属性...;
        方法...;
        public void run(){//覆写Thread 的run()方法,线程的主体
        }
    }
    
    • 实例化 Mythread m1=new MyThread(“thread A”);
    • m1.start();//run方法调用没有启动线程.
    • 一个类只能继承Thread类才能实现多线程,必定受到单继承局限的影响。一般实现多线程,需要通过Runnable接口完成。
  • Runnable 接口

    class MyThread implements Runnable{
        属性...;
        方法...;
        public void run(){//覆写Thread 的run()方法,线程的主体
        }
    }
    * MyThread m1 =new MyThread("thread A");
    * MyThread m2 =new MyThread("thread B");
    * Thread t1=new Thread(m1);
    * Thread t2=new Thread(m2);
    * t1.start();
    * t2.start();
    
  • Runnale接口和Thread类

    • 之间的联系

      public class Thread extends Object implements Runnable
      
      • Thread类也是Runnable接口的子类
    • 之间的区别
      • 如果一个类继承Thread类,则不适合于多个线程共享资源。
      • 实现Runnable接口,就可以方便地实现资源的共享。
    • Runnbale接口相对于Thread类,优势:
      • 适合多个相同的代码的线程,处理同一个资源的情况。
      • 可以避免Java单继承带来的局限
      • 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。使用Runnable实现多线程。
  • 线程的状态
    • 创建状态:有相应内存空间和其他资源,Thread thread =new Thread();
    • 就绪状态:start()启动线程,启动时候就进入就绪状态。
    • 运行状态:就绪被调用,获得处理器资源的时候,进去运行状态。自动调用run()方法。
    • 堵塞状态:正在执行,某种原因被挂起,CPU暂停终止。sleep(),suspend(),wait()线程进入堵塞的状态。
    • 死亡状态:stop()或者run()执行完成。
  • 至少启动两个线程,main和垃圾回收

同步与死锁

  • 解决资源共享的同步操作,可以使用同步代码块和同步方法两种方式。
  • 同步代码块

    synchronized(同步对象){
        需要同步的代码;
    }
    
    • synchronized(this){}
  • 同步方法

    sychronized 返回值 方法名称(参数列表){
    }
    
  • 方法的完整格式
    • public final static sychronzed void fun(int i) throws Exception1,Exception2
  • Object 类对线程的支持—-等待于唤醒

    • 作为所有类的父类,这几种方法对线程支持

      public final void wait()throws InterruptedException//等待线程
      public final void wait(long timeout)throws InterruptedException
      public final void notify()//换新第一个等待的线程
      public final void nootifyAll()//唤醒所有的线程
      
  • 线程的生命周期
    • suspend():暂时挂起线程。
    • resume():恢复挂起的线程
    • stop():停止线程
    • 都是用了@Deprecated声明,表示不建议使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值