zoukankan      html  css  js  c++  java
  • Java

    要注意ClassInstance == XXX 的情况,如果ClassInstance是基本数据类型的封装类且为null,会产生空指针错误。

    Boolean对象就出现了这个问题,可能是基本数据类型的封装类会调用valueOf()

    Wait/notify

    wait()方法表示,放弃当前对资源的占有权,等啊等啊,一直等到有人通知我,我才会运行后面的代码。
    notify()方法表示,当前的线程已经放弃对资源的占有,通知等待的线程来获得对资源的占有权,但是只有一个线程能够从wait状态中恢复, 然后继续运行wait()后面的语句;notifyAll()方法表示,当前的线程已经放弃对资源的占有, 通知所有的等待线程从wait()方法后的语句开始运行。

    Sychronized

    在 Java 中,不光是类实例,每一个类也对应一把锁,这样我们也可将类的静态成员函数声明为 synchronized ,以控制其对类的静态成员变量的访问。java的wait吊起线程的时候会释放synchronized锁。所以可以同时在wait和notifyAll的两个不同代码块中使用synchronized。

    1,修饰函数

    public synchronized void accessVal(int newVal);
    synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。

    2,修饰代码段

    synchronized(syncObject) {

    //允许访问控制的代码
    }

    其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行。

    当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的除synchronized(this)同步代码块以外的部分。

    一般来说,需要保护的都是static的数据,因为它们可以被不同的线程所访问。还有就是几个线程共有一个实例的情况,需要sychronized保护。

    Thread

    可以传入Runnable来实例化Thread,在runnable中也可通过Thread.currentThread()获取所属的Thread实例。

    Thread.interrupt()

    要中断Thread,只能使用Thread.interrupt()方法使线程受到阻塞时抛出一个中断信号。

    真正要实现中断,还需要对这个中断信号进行处理:

    1,捕获异常。因为block的线程(sleep() or join())在被调用interrupt时会产生InterruptException,可以捕获该异常来决定是否中断。如果不处于block状态,不会抛出异常,直到block。

    2,使用Thread.interrupted()判断是否收到中断信号。

    Thread.yield()

    暂停当前正在执行的线程对象,并执行其他线程。

    注意:这里的其他也包含当前线程。

    Thread.sleep(long millis)

    使当前线程暂停millis所指定的毫秒,转到执行其它线程。

    Thread.join()

    先start()执行线程,然后join(),使join()后面的代码要等线程执行完再运行

  • 相关阅读:
    C# this关键字的四种用法
    MVC Html.AntiForgeryToken() 防止CSRF攻击
    简单的C#网络爬虫
    string format的各类格式及用法
    选取两个有序数组中最大的K个值,降序存入另一个数组中
    程序员面试:青蛙跳台阶问题(变态跳台阶)
    贪心算法,递归算法,动态规划算法比较与总结
    storm简介[ZZ]
    逻辑回归:使用SGD(Stochastic Gradient Descent)进行大规模机器学习
    mahout分类
  • 原文地址:https://www.cnblogs.com/wolflzc/p/6178812.html
Copyright © 2011-2022 走看看