JAVA自学笔记

    xiaoxiao2021-03-25  127

    线程的创建和启动   继承Thread类,创建线程类。改写run()方法,实例化后,启动start()              Thread.currentThread():Thread类的静态方法,该方法总是返回当前正在执行的线程对象           getName():该方法是Thread类的实例方法,该方法返回调用该方法的线程名字 定义Runnable接口实现类,改写run()方法,实例化后,不需要start()          但是需要new Thread(new Runnable).start() 来启动         即Thread对象来包装Runnable对象         其中Runnable线程的名字由Thread.currentThread()或getName()获取       使用继承Thread类来创建线程,多个线程之间无法共享线程类的实例变量       使用继 Runnable接口 来创建线程,多个线程之间可以共享线程类的实例变量            定义Callable接口实现类,改写call()方法,方法内要有返回值,实例化后。                Future接口的FutureTask类的实例化对象,来包装callable对象                Thread对象来包装FutureTask对象                调用FutureTask对象的get()方法来获取子线程执行结束后的返回值       call()方法允许抛出异常,而且允许带返回值 综上,Callable接口、Runnable接口 要绑定到当前Thread线程(Thread.currentThread()获取)       2.创建和管理线程的方法           线程池:   Executors类,ExecutorService接口     线程工厂:ThreadFactory接口           线程: Thread             3.线程生命周期          新建(new)          就绪(Runnable)          运行(Running)          阻塞(Blocked)          死亡(Dead)           4.运行和阻塞状态           当发生如下情况,线程进入阻塞状态           (1)线程调用sleep方法           (2)线程调用了一个阻塞式的I/0方法           (3)线程试图获取一个同步监视器           (4)线程在等待某个通知(notify)           (5)程序调用了线程的suspend()方法将该线程挂起           当发生如下情况,线程进入就绪状态           (1)调用sleep()方法的线程经过了指定时间           (2)线程调用的阻塞式I/0方法已经返回           (3)线程成功地获取了同步监视器           (4)线程正在等待某个通知时,其他线程发出一个通知           (5)处于挂起状态的线程被调用了resume()恢复方法           当发生如下情况,线程进入死亡状态           (1)run()和call()执行完成,线程正常结束           (2)线程抛出一个未捕的Exception和Error           (3)直接调用stop()方法,可以会导致死锁                   5.控制线程           (1)join方法,由线程调用其他线程           (2)setdaemon(true),设置后台线程;isDaemon()判断是否后台线程           (3)sleep(),线程睡眠           (4)yield(),线程让步,将该线程转为就绪状态           (5)改变线程的优先级                    setPriority(int newPriority)设置优先级,getPriority()获取优先级                   MAX_PRIORITY:其值为10                   MIN_PRIORITY:其值为1                   NORM_PRIORITY:其值为5           6.run()方法不具有同步安全性             使用同步监视器的代码块             synchronized(object)             {                                  }              使用同步监视器的方法              使用关键字synchronized修饰某个方法(非static方法)                         7.释放同步监视器的锁定            (1)当前线程的同步代码块、同步方法执行结束            (2)当前线程的同步代码块、同步方法遇到break、return返回            (3)当前线程的同步代码块、同步方法遇到未处理的Error或Exception            (4)当前线程的同步代码块、同步方法,程序执行了同步监视器对象的wait()方法           8.线程不释放的情况            (1)当前线程的同步代码块、同步方法,程序调用sleep()或yield()            (2)当前线程的同步代码块、同步方法,其他线程调用了该线程的suspend()                       9.同步锁(Lock)             ReentrantLock(可重入锁)类             private  final ReentrantLock  lock = new  ReentrantLock();             .......             lock.lock();             .......            finally{             lock.unlock();             }             .......
    转载请注明原文地址: https://ju.6miu.com/read-6688.html

    最新回复(0)