学习笔记之面向对象编程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
原创粉丝点击