• JAVA 多线程 杂谈


    一:java创建线程的三种方式

    1.继承Thread类;

    2.实现Runnable接口;

    3.实现Callable接口:Callable接口重写的是 call() 方法。1-允许有返回值,2-允许抛出异常。

    二:java线程运行状态

    NEW:初始状态,线程被构建,但是还没有调用start()方法;

    RUNNABLE:运行状态,java线程将操作系统中的就绪和运行两种状态笼统地称作“运行中“;

    BLOCKED:阻塞状态,表示线程阻塞于锁;

    WAITING:等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其它线程做出一些特定动作(通知或中断);

    TIME_WAITING:超时等待状态,它是可以在指定的时间自行返回的;

    TERMINATED:表示当前线程已经执行完毕;

    三:线程的启动和停止:调用线程的start()方法进行启动,随着run()方法的执行完毕,线程也随之终止。

    启动:线程对象在初始化完成之后,调用start()方法就可以启动这个线程。线程start()方法的含义是:当前线程(即parent线程)同步告知java虚拟机,只要线程规划器空闲,应立即启动调用start()方法的线程。

    终止:

    1.过时的方法:暂停—suspend();恢复—resume(); 停止—stop();它们过时的原因均是,在方法调用后,不会保证线程所占有的资源被正常释放。

    2.通过响应中断来停止线程:中断可以理解为线程的一个标识位的属性,它表示一个运行中的线程是否被其他线程进行了中断操作,中断操作好比其它线程对该线程打了招呼,

    其它线程通过调用该线程的interrupt()方法对其进行中断操作。

    线程通过检查自身是否被中断来进行响应,线程通过方法isInterrupted()来进行判断是否被中断。

    3.利用一个boolean变量来控制需要停止的任务并终止该线程。

     四:两个关键字

    volatile:可以用来修饰字段(成员变量)就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。

    synchronized:可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性。

    五:等待/通知机制

    等待/通知:是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或者notifyAll()方法,线程A收到通知后从对象O的wait()方法返回,进而执行后续操作。上述两个线程通过对象O来完成交互

    wait()方法会释放锁,在调用notify()或notifyAll()方法后不会立即释放锁,需要等待调用的线程释放锁之后,线程才会从wait()方法返回。

    六:锁

    锁是控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。

    1.synchronized实现锁功能;2.Lock接口实现锁功能;

    synchronized:隐式获取与释放锁;

    未完待续

  • 相关阅读:
    C/C++中volatile关键字详解(转)
    Spring中 @Autowired标签与 @Resource标签 的区别(转)
    [转]各种互斥量的总结
    nginx限制ip访问(转)
    HDU 4833 Best Financing (DP)
    HDU 4832 Chess (DP)
    HDU 4831 Scenic Popularity
    POJ 2155 Matrix (二维线段树)
    POJ 2155 Matrix (二维树状数组)
    HDU 4819 Mosaic (二维线段树)
  • 原文地址:https://www.cnblogs.com/dev1ce/p/10637367.html
Copyright © 2020-2023  润新知