晒太阳

2012年11月23日

java线程互锁演示

 1 /**
 2  * 线程互锁:线程td1得到obj1的锁,线程td2得到了obj2的锁,接着,线程td1在持有obj1的锁的同时
 3  * 企图得到obj2的锁,而此时线程td2仍持有obj2的锁,所以线程td1等待,而线程td2的行为也与线程td1相同
 4  * 因此就形成了死锁
 5  */
 6 public class Client {
 7     public static void main(String[] args) {
 8         final Object obj1 = "test1";
 9         final Object obj2 = "test2";
10         
11         Thread td1 = new Thread(){
12             public void run(){
13                 synchronized(obj1){
14                     System.out.println("td1得到了obj1的锁");
15                     try {
16                         Thread.sleep(1000);
17                     } catch (InterruptedException e) {
18                         e.printStackTrace();
19                     }
20                     
21                     synchronized(obj2){
22                         System.out.println("td1企图得到obj2的锁");
23                         
24                         try {
25                             Thread.sleep(1000);
26                         } catch (InterruptedException e) {
27                             e.printStackTrace();
28                         }
29                     }
30                 }
31             }
32         };
33         
34 
35         Thread td2 = new Thread(){
36             public void run(){
37                 synchronized(obj2){
38                     System.out.println("td2得到了obj2的锁");
39                     try {
40                         Thread.sleep(1000);
41                     } catch (InterruptedException e) {
42                         e.printStackTrace();
43                     }
44                     
45                     synchronized(obj1){
46                         System.out.println("td2企图得到obj1的锁");
47                         
48                         try {
49                             Thread.sleep(1000);
50                         } catch (InterruptedException e) {
51                             e.printStackTrace();
52                         }
53                     }
54                 }
55             }
56         };
57         
58         td1.start();
59         td2.start();
60     }
61 
62 }

posted @ 2012-11-23 06:16 晒太阳 阅读(356) | 评论 (0)编辑 收藏

2012年11月1日

java 快速排序

 1 
 2 public class QuickSort {
 3     public static int partition(int[] arr, int low, int high){
 4         int pivot = arr[low];
 5         while(low<high){
 6             while(low<high && arr[high]>=pivot){
 7                 high--;
 8             }
 9             if(low<high){
10                 arr[low] = arr[high];
11                 low++;
12             }
13             
14             while(low<high && arr[low]<=pivot){
15                 low++;
16             }
17             if(low<high){
18                 arr[high] = arr[low];
19                 high--;
20             }
21         }
22         arr[low] = pivot;
23         return low;
24     }
25     
26     public static void sort(int[] arr, int low, int high){
27         int pivot;
28         if(low<high){
29             pivot = partition(arr,low,high);
30             sort(arr,low,pivot-1);
31             sort(arr,pivot+1,high);
32         }
33     }
34     
35     public static void quickSort(int[] arr){
36         sort(arr,0,arr.length-1);
37     }
38     
39     /*public static void main(String[] args) {
40         int[] arr = {46,34,2,99,6,23,20,8};
41         quickSort(arr);
42         StringBuilder sb = new StringBuilder();
43         for(int i=0;i<arr.length;i++){
44             sb.append(arr[i]+",");
45         }
46         sb.deleteCharAt(sb.length()-1);
47         System.out.println(sb);
48     }*/    
49 }
50 

posted @ 2012-11-01 12:06 晒太阳 阅读(101) | 评论 (0)编辑 收藏

2009年9月23日

关于instanceof的用法

先看两个小程序:
1、
1public class IntegerTypeTest {
2    public static void main(String[] args){
3        String str = "abc";
4        boolean myBoolean = (str instanceof Integer); //compile time error
5        System.out.println(myBoolean);
6    }

7}
2、
 1     import java.util.*;
public class InstanceOfDemo {
 2
 3    public static void main(String[] args) {
 4        System.out.println(new InstanceOfDemo() instanceof String); //compile time error
 5        System.out.println(new InstanceOfDemo() instanceof Exception); //compile time error
 6        System.out.println(new InstanceOfDemo() instanceof Object); //compilation and output true
 7        
 8        System.out.println(new InstanceOfDemo() instanceof List); //compilation and output false
 9    }

10}

11
这两个程序的编译结果和我们预想的不一样,第一个程序编译结果是:

第二个程序编译结果是:

产生这种错误的原因在于,instanceof运算符第一个操作数的类型应该是第二个操作数的父类、子类或者与第二个操作数的类型相同。否则编译会出错。

posted @ 2009-09-23 08:39 晒太阳 阅读(321) | 评论 (0)编辑 收藏

仅列出标题  下一页
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿

随笔档案

文章档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜