学习笔记之面向对象编程24(多线程机制3)
来源:互联网 发布:淘宝曲度腰椎治疗仪 编辑:程序博客网 时间:2024/05/21 07:14
(一)线程的优先级别
《1》java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器 按照线程的优先级决定应调度哪个线程来执行;
《2》线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级是5;
《3》使用下述方法获得或设置线程对象的优先级:
a:int getPriority():获得线程对象的优先级;
b:void setPriority(int newpriority):设置线程对象的优先级。
举例1:
import java.util.*;public class TestPriority {public static void main(String[] args){Thread t1 = new Thread(new T1());Thread t2 = new Thread(new T2());t1.setPriority(Thread.NORM_PRIORITY+3);t1.start();t2.start();}}class T1 implements Runnable{public void run(){for(int i=0;i<500;i++){System.out.println("T1:"+i);}}}class T2 implements Runnable{public void run(){for(int i=0;i<500;i++){System.out.println("T2:"+i);}}}
(二)互锁
在java语言中,引入了对象互锁的概念,保证共享数据操作的完整性,每个对象都对应于一个可称为“互斥锁”的标识,,这个标识保证在任一时刻,只能用一个线程访问该对象;
关键字synchronized来与对象的互斥锁联系,当某个对象synchronized修饰时,表明该对象在任一时刻只能由一个线程访问;
synchronized还可以放在方法声明中,表示整个方法为同步方法;如
import java.util.*;public class TestDeadlock implements Runnable{public int flag=1;static Object o1 = new Object(),o2 = new Object();public void run(){System.out.println("flag="+flag);if(flag==1){synchronized(o1){try{Thread.sleep(500);}catch(Exception e){e.printStackTrace();}synchronized(o2){System.out.println("1");}}}if(flag==0){synchronized(o2){try{Thread.sleep(500);}catch(Exception e){e.printStackTrace();}synchronized(o1){System.out.println("0");}}}}public static void main(String[] args){TestDeadlock td1 = new TestDeadlock();TestDeadlock td2 = new TestDeadlock();td1.flag=1;td2.flag=0;Thread t1 = new Thread(td1);Thread t2 = new Thread(td2);t1.start();t2.start(); }}
运行结果:
flag=1
flag=0
阅读全文
0 0
- 学习笔记之面向对象编程24(多线程机制3)
- 学习笔记之面向对象编程22(多线程机制1)
- 学习笔记之面向对象编程23(多线程机制2)
- 学习笔记之JavaSE(12)--面向对象编程3
- 学习笔记之面向对象编程3(访问控制)
- 学习笔记之面向对象编程25(网络编程)
- [学习笔记]python之面向对象编程
- JavaScript学习笔记之面向对象编程
- C++之面向对象编程学习笔记
- python学习笔记(三)之面向对象编程
- Python之学习笔记(面向对象编程)
- 学习笔记之JavaSE(10)--面向对象编程1
- 学习笔记之JavaSE(11)--面向对象编程2
- 学习笔记之JavaSE(13)--面向对象编程4
- 学习笔记之JavaSE(14)--面向对象编程5
- 学习笔记之JavaSE(15)--面向对象编程6
- 学习笔记之JavaSE(16)--面向对象编程7
- 学习笔记之JavaSE(17)--面向对象编程8
- 带混淆的Eclipse项目导入Android Studio时报错Error:(16, 0) User supplied default proguard base extension name is
- 防止训练深度网络中出现过拟合现象
- 欢迎使用CSDN-markdown编辑器
- 函数dup and dup2
- CodeForces
- 学习笔记之面向对象编程24(多线程机制3)
- Java门面模式(或外观模式)
- 在线工具网站合集(持续更新)
- python_lintcode_82落单的数_83落单的数 II_84落单的数 III
- C#调用动态库,无法加载 DLL"xx.dll": 找不到指定的模块
- 数据结构 p25-26 算法实现 线性表的查找与归并排序2
- springBoot @Scheduled注解 cron表达式详解
- SAN LUN Mapping出错导致文件系统共享冲突的恢复案例
- linux下编写tcp服务器学习笔记