Java多线程编程(三)线程的优先级、同步与死锁
2016-05-01 21:15
399 查看
线程的优先级:
线程的优先级分为三种,分别是:
1-MIN_PRIORITY
10-MAX_PRIORITY
5-NORM_PRIORITY
如果什么都不设置默认值是5
线程的优先级可以影响线程的执行顺序,当然这里指的是有可能影响,不会一定影响。在默认状态下(比如说主线程)它的默认值是5
具体代码演示:
同步与死锁:
1.同步代码块
在代码块上加上“synchronized”关键字,则此代码块就称为同步代码块
2.同步代码块格式:
除了代码块可以同步,方法也是可以同步的
4.方法同步格式:
1.同步代码块方式:
*死锁:学生找工作(高新)
* 企业需要你有工作经验(经验)
*/
线程的优先级分为三种,分别是:
1-MIN_PRIORITY
10-MAX_PRIORITY
5-NORM_PRIORITY
如果什么都不设置默认值是5
线程的优先级可以影响线程的执行顺序,当然这里指的是有可能影响,不会一定影响。在默认状态下(比如说主线程)它的默认值是5
具体代码演示:
package com.yeqc.thread; class ThRun implements Runnable{ @Override public void run() { for(int i=0; i<5; i++){ try { Thread.sleep(1000); System.out.println(Thread.currentThread().getName()+":"+i); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class ThreadDemo03 { public static void main(String[] args) { Thread t1 = new Thread(new ThRun(),"A"); Thread t2 = new Thread(new ThRun(),"B"); Thread t3 = new Thread(new ThRun(),"C"); t1.setPriority(Thread.MIN_PRIORITY); t2.setPriority(Thread.NORM_PRIORITY); t3.setPriority(Thread.MAX_PRIORITY); t1.start(); t2.start(); t3.start(); } }运行结果:
C:0 A:0 B:0 C:1 B:1 A:1 C:2 A:2 B:2 C:3 A:3 B:3 C:4 B:4 A:4
同步与死锁:
1.同步代码块
在代码块上加上“synchronized”关键字,则此代码块就称为同步代码块
2.同步代码块格式:
sychronized(同步对象){ 需要同步的代码块; }3.同步方法
除了代码块可以同步,方法也是可以同步的
4.方法同步格式:
sychronized void 方法名称(){}具体代码演示:
1.同步代码块方式:
package com.yeqc.thread; class MythreadDemo implements Runnable{ private int ticket = 5; @Override public void run() { for (int i = 0; i < 10; i++) { synchronized (this) { if (ticket>0) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("车票:"+ticket--); } } } } } public class ThreadDemo04 { public static void main(String[] args) { MythreadDemo m = new MythreadDemo(); Thread t1 = new Thread(m); Thread t2 = new Thread(m); Thread t3 = new Thread(m); t1.start(); t2.start(); t3.start(); } }运行结果:
车票:5 车票:4 车票:3 车票:2 车票:12.同步方法
package com.yeqc.thread; class MythreadDemo implements Runnable{ private int ticket = 5; @Override public void run() { for (int i = 0; i < 10; i++) { tell(); } } public synchronized void tell(){ if (ticket>0) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("车票:"+ticket--); } } } public class ThreadDemo04 { public static void main(String[] args) { MythreadDemo m = new MythreadDemo(); Thread t1 = new Thread(m); Thread t2 = new Thread(m); Thread t3 = new Thread(m); t1.start(); t2.start(); t3.start(); } }运行结果:
车票:5 车票:4 车票:3 车票:2 车票:1/**
*死锁:学生找工作(高新)
* 企业需要你有工作经验(经验)
*/
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python3写爬虫(四)多线程实现数据爬取
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序