码迷,mamicode.com
首页 > 编程语言 > 详细

Java 多线程知识点整理

时间:2014-07-26 01:39:26      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   color   使用   io   art   re   

1.如何停止一个正在运行的线程?
使用共享变量,用volatile变量修饰,线程循环去访问该变量。如果线程因为发生某些事件进行阻塞,可以使用Thread的interrupt方法。可以使一个被阻塞的线程抛出一个中断异常,从而使线程提前结束阻塞状态,退出堵塞代码。
class MyThread extends Thread {
    volatile boolean stop = false;

    public void run() {
        while (!stop) {
            System.out.println(getName() + " is running");
            try {
                sleep(1000);
            } catch (InterruptedException e) {
                System.out.println("week up from blcok...");
                stop = true; // 在异常处理代码中修改共享变量的状态
            }
        }
        System.out.println(getName() + " is exiting...");
    }
}

class InterruptThreadDemo {
    public static void main(String[] args) throws InterruptedException {
        MyThread m1 = new MyThread();
        System.out.println("Starting thread...");
        m1.start();
        Thread.sleep(3000);
        System.out.println("Interrupt thread...: " + m1.getName());
        m1.stop = true; // 设置共享变量为true
        m1.interrupt(); // 阻塞时退出阻塞状态
        Thread.sleep(3000); // 主线程休眠3秒以便观察线程m1的中断情况
        System.out.println("Stopping application...");
    }
}
 
2.sleep()和 wait()有什么区别?
sleep方法是Thread类的方法,有一个参数指定当前线程休眠的毫秒数。wait是Object类的方法,导致当前线程等待。最大的不同是在等待时wait方法时会释放锁,而sleep方法会一直持有锁。wait通常被用于线程间交互,sleep通常被用于暂停执行。
 
3.notify()和notifyAll()有什么区别?
notify是随机唤醒一个等待某个资源的线程,进入就绪队列等待CPU的调度,notifyAll是唤醒所有的,进入就绪队列等待CPU调度
4.什么叫线程安全?
当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。
5.CopyOnWriteArrayList可以用于什么应用场景?
CopyOnWriteArrayList用于替代同步List,在某些情况下它提供了更好的并发性能,并且在迭代期间不需要对容器进行加锁或复制。当容器的规模较大时,仅当迭代操作远远多于修改操作时,才应该使用“写入时复制”容器。
6.

Java 多线程知识点整理,布布扣,bubuko.com

Java 多线程知识点整理

标签:style   blog   java   color   使用   io   art   re   

原文地址:http://www.cnblogs.com/scofield0li/p/3869079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!