java并发编程(二)-休眠、优先级
2016-04-07 13:24
429 查看
续接java并发编程(一),本篇文章主要分析线程休眠、优先级、让步,例子沿用对《java编程思想》练习题进行改编。
休眠
输出式样:
优先级
线程优先级将线程的重要性传递给了调度器。然而,这并不是意味着优先权较低的线程将得不到执行(也就是说,优先权不会导致死锁)。较低的优先级的线程仅仅是执行的频率较低。
输出式样:
总结
《java编程思想》里面关于线程的讲解很详细,篇幅较长,涉及的知识点也多,把里面的练习题都梳理一篇花费的时间也蛮久,太急切于梳理线程很可能会觉得枯燥、无味,坚持不下去。所以以后有条件,每天写一篇关于线程的理解,同时工作、学习中遇到的其它的问题都会试着去用博客的形式记录下来。对于写博客我自己还是一个新手,不是很适应,往往一篇很简短的文章自己都要写好久,也不会表达自己的感想。希望从今天开始自己以后每天坚持写博客,记录学习的点滴。
休眠
练习一:创建一个任务,它休眠1至10秒之间的随机数量的时间,然后显示它的休眠时间并退出。创建并运行一定数量的这种任务
package twentyoneThread; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; class ExcFive implements Runnable { private final int maxSleepTime = 10; private int sleepTime; private static int taskCount = 0; private final int id = taskCount++; private Random random=new Random(); //返回休眠时间 public String Status() { return "#" + id + " thread sleep " + sleepTime + "secends"; } public ExcFive() { sleepTime = random.nextInt(maxSleepTime)+1;//生成随机休眠数 } @Override public void run() { try { TimeUnit.MILLISECONDS.sleep(sleepTime);//推荐休眠时间的写法 System.out.println(Status()); Thread.yield(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class TestExcFive { public static void main(String[] args) { ExecutorService exes = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { exes.execute(new ExcFive()); } exes.shutdown(); } }
输出式样:
#4 thread sleep 2secends #2 thread sleep 7secends #3 thread sleep 7secends #1 thread sleep 10secends #0 thread sleep 9secends
优先级
线程优先级将线程的重要性传递给了调度器。然而,这并不是意味着优先权较低的线程将得不到执行(也就是说,优先权不会导致死锁)。较低的优先级的线程仅仅是执行的频率较低。
package twentyoneThread; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; class ExcSix implements Runnable { private int countDown = 3; private int priority; private static int taskCount = 0; private final int id = taskCount++; public String Status() { return Thread.currentThread()+"#" + id +"priortity=" +Thread.currentThread().getPriority()+"countDown="+countDown; } public ExcSix(int priortity) { this.priority= priortity; } @Override public void run() { Thread.currentThread().setPriority(priority); while (countDown-- > 0) { System.out.println(Status()); Thread.yield(); } } } public class TestExcSix { public static void main(String[] args) { ExecutorService exes = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { exes.execute(new ExcSix(Thread.MIN_PRIORITY)); exes.execute(new ExcSix(Thread.MAX_PRIORITY)); } exes.shutdown(); } }
输出式样:
Thread[pool-1-thread-2,10,main]#1priortity=10countDown=2 Thread[pool-1-thread-4,10,main]#3priortity=10countDown=2 Thread[pool-1-thread-2,10,main]#1priortity=10countDown=1 Thread[pool-1-thread-4,10,main]#3priortity=10countDown=1 Thread[pool-1-thread-2,10,main]#1priortity=10countDown=0 Thread[pool-1-thread-4,10,main]#3priortity=10countDown=0 Thread[pool-1-thread-3,1,main]#2priortity=1countDown=2 Thread[pool-1-thread-5,1,main]#4priortity=1countDown=2 Thread[pool-1-thread-7,1,main]#6priortity=1countDown=2 Thread[pool-1-thread-9,1,main]#8priortity=1countDown=2 Thread[pool-1-thread-1,1,main]#0priortity=1countDown=2 Thread[pool-1-thread-3,1,main]#2priortity=1countDown=1 Thread[pool-1-thread-6,10,main]#5priortity=10countDown=2 Thread[pool-1-thread-5,1,main]#4priortity=1countDown=1 Thread[pool-1-thread-7,1,main]#6priortity=1countDown=1 Thread[pool-1-thread-9,1,main]#8priortity=1countDown=1 Thread[pool-1-thread-8,10,main]#7priortity=10countDown=2 Thread[pool-1-thread-6,10,main]#5priortity=10countDown=1 Thread[pool-1-thread-8,10,main]#7priortity=10countDown=1 Thread[pool-1-thread-3,1,main]#2priortity=1countDown=0 Thread[pool-1-thread-1,1,main]#0priortity=1countDown=1 Thread[pool-1-thread-9,1,main]#8priortity=1countDown=0 Thread[pool-1-thread-7,1,main]#6priortity=1countDown=0 Thread[pool-1-thread-5,1,main]#4priortity=1countDown=0 Thread[pool-1-thread-6,10,main]#5priortity=10countDown=0 Thread[pool-1-thread-8,10,main]#7priortity=10countDown=0 Thread[pool-1-thread-1,1,main]#0priortity=1countDown=0 Thread[pool-1-thread-10,10,main]#9priortity=10countDown=2 Thread[pool-1-thread-10,10,main]#9priortity=10countDown=1 Thread[pool-1-thread-10,10,main]#9priortity=10countDown=0
总结
《java编程思想》里面关于线程的讲解很详细,篇幅较长,涉及的知识点也多,把里面的练习题都梳理一篇花费的时间也蛮久,太急切于梳理线程很可能会觉得枯燥、无味,坚持不下去。所以以后有条件,每天写一篇关于线程的理解,同时工作、学习中遇到的其它的问题都会试着去用博客的形式记录下来。对于写博客我自己还是一个新手,不是很适应,往往一篇很简短的文章自己都要写好久,也不会表达自己的感想。希望从今天开始自己以后每天坚持写博客,记录学习的点滴。
相关文章推荐
- java导出pdf
- Spring 的下载、安装和使用
- 从.NET转JAVA开发
- Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
- java web程序升级jsp页面缓存无法显示最新的内容
- Eclipse 的 Debug 介绍与技巧
- Eclipse 的 git 插件操作 "代码提交"以及"代码冲突"
- Java Web log4j (日志)
- java算法之身份证号码验证
- java服务器学习
- 动态规划经典问题Java实现
- java String 中 intern方法的概念
- 初学Java的类和对象
- java服务器应答例子(用telnet方法测试)
- Java运算符
- Java语句的执行结构
- 自定义注释——Java
- Java常量,变量和数据类型
- Shiro学习(12)与Spring集成
- nested exception is java.io.FileNotFoundException: class path resource [spring/spring-datasource-mog