多线程(二)

来源:互联网 发布:如何加淘宝店铺粉丝 编辑:程序博客网 时间:2024/06/16 14:06
三  线程的操作:
③:interrupt()      中断当前线程,其实是在线程上打了标签,让线程自己中断,不中断也行,其他方法可以去掉这个标签。   黑马程序员----多线程(二) - 君山 - 临时账号更改,备注
 实际运行结果如下图:
黑马程序员----多线程(二) - 君山 - 临时账号更改,备注
 可以看到,实际上线程并没有被中断,而且还报了线程中断异常,因为interrupt方法只是打了标签。如果要中断线程还是应该从run方法入手。
④:设置优先级
setPriority()     MAX_PRIORITY()        MIN_PRIORITY()                     NORMAL_PRIORITY()
⑤:守护线程与礼让
setDaemon()          当jvm里面没有用户线程的时候,守护线程会自己终止。垃圾回收就是一种守护线程。     
   yield()                   让出当前的CPU时间片               

四  线程同步
当多个线程需要共享一个资源的时候,就需要同步。
主要有两种方式,一种是synchronized()代码块
黑马程序员----多线程(二) - 君山 - 临时账号更改,备注
 另外一种是同步方法
黑马程序员----多线程(二) - 君山 - 临时账号更改,备注
两个方法的优缺点:当一个方法中所有的语句都需要同步的时候,推荐同步方法,否则,同步代码块。同步代码块可以通过“琐”实现控制。
 五 线程死锁
概括为,当多个同步的方法或者代码块,互相调用的时候,出现了A的实现需要B先实现,而B的实现又需要A的实现的时候,就会出现线程的死锁,线程无法执行。所以,同步的时候注意不要同步的太多,而且互相不要影响。
六 线程生命周期
黑马程序员----多线程(二) - 君山 - 临时账号更改,备注
 七 线程池
预先创建线程的一种方式,线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中,然后对这些资源进行复用,减少频繁的创建和销毁。
我们常用的线程池有如下一些:


public class NewSingleThreadExecutor {

public static void main(String[] args) {
//单线程池使用模式
ExecutorService es=Executors.newSingleThreadExecutor();
SingleThread s1=new SingleThread();
es.execute(s1);
//多线程池使用方式
ExecutorService es2=Executors.newFixedThreadPool(2);
es.execute(s1);
SingleThread s2=new SingleThread();
es2.execute(s2);
//缓冲池使用方式
ExecutorService es3=Executors.newCachedThreadPool();
es3.execute(s2);
//创建一个大小无限制的线程池
ExecutorService es4=Executors.newScheduledThreadPool(2);
es4.execute(s2);
}
}
class SingleThread implements Runnable{
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName());
}
}
}

0 0
原创粉丝点击