多线程(二)
来源:互联网 发布:如何加淘宝店铺粉丝 编辑:程序博客网 时间: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
- 多线程同步(二)
- C++多线程(二)
- 多线程(二) Thread
- 多线程总结(二)
- 多线程(二)
- Qt多线程(二)
- linux多线程(二)
- c++多线程(二)
- C++多线程(二)
- 多线程学习(二)
- c++多线程(二)
- 多线程 笔记(二)
- java多线程(二)
- C++多线程(二)
- linux多线程(二) .
- GCD 多线程 (二)
- GCD 多线程 (二)
- c++多线程(二)
- 【尝鲜版】驱动级网站防护软件-浪潮云戟
- Codeforces Round #313 (Div. 2) (ABCD)
- BZOJ 1004 [HNOI2008]Cards 置换+burnside定理+逆元
- 如何在Eclipse里面更新添加主题
- os.rename()导致WindowsError: [Error 183]的问题
- 多线程(二)
- 在VirtualBox中安装Ubuntu14报错:Failed to open a session for the virtual machine,Unable to load R3……
- Android性能分析优化 - TraceView介绍
- SQL常用语句总结
- 关于C++二维指针
- Qt libqevdevtouchplugin.so插件的改写
- xtrabackup 热备 mysql
- java不定参数存在一个小问题。
- 网络编程