并发集合

  当需要在并发程序中使用数据集合时,必须要谨慎地选择相应的实现方式。大多数集合类不能直接用于并发应用,因为它们没有对本身数据的并发访问进行控制。如果一些并发任务共享了一个不适用于并发任务的数据结构,将会遇到数据不一致的错误,并将影响程序的准确运行。这类数据结构的一个例子是ArrayList类。

  Java提供了一些可以用于并发程序中的数据集合,它们不会引起任何问题。一般来说,Java提供了两类适用于并发应用的集合。

  • 阻塞式集合(Blocking Collection):这类集合包括添加和移除数据的方法。当集合已满或为空时,被调用的添加或者移除方法就不能立即被执行,那么调用这个方法的线程将被阻塞,一直到该方法可以被成功执行。
  • 非阻塞式集合(Non-Blocking Collection):这类集合也包括添加和移除数据的方法。如果方法不能立即执行,则返回null或抛出异常,但是调用这个方法的线程不会被阻塞。

  通过本节的学习,我们将学会如何在并发应用中使用一些Java集合。

  • 非阻塞式列表对应的实现类:ConcurrentLinkedDeque类;
  • 阻塞式列表对应的实现类:LinkedBlockingDeque类;
  • 用于数据生成或消费的阻塞式列表对应的实现类:LinkedTransferQueue类;
  • 按优先级排序列表元素的阻塞式列表对应的实现类:PriorityBlockingQueue类;
  • 带有延迟列表元素的阻塞式列表对应的实现类:DelayQueue类;
  • 非阻塞式可遍历映射对应的实现类:ConcurrentSkipListMap类;
  • 随机数字对应的实现类:ThreadLocalRandom类;
  • 原子变量对应的实现类:AtomicLong和AtomicIntegerArray类。

1. 使用非阻塞式线程安全列表

  并发列表允许不同的线程在同一时间添加或者移除列表中的元素,而不会造成数据的不一致。

  在本节,将会学到如何在并发程序中使用非阻塞式列表。非阻塞式列表提供了一些操作。如果被执行的操作不能立即运行(例如,在列表为空时,从列表中取出一个元素),方法会抛出异常或者返回null。Java7引入了ConcurrentLinkedDeque类来实现非阻塞式并发列表。

  将要实现的范例包含以下两个不同的任务:

  • 添加大量的数据到一个列表中;
  • 从同一个列表中移除大量的数据。

1. 创建一个名为AddTask的类,实现Runnable接口。

import java.util.concurrent.ConcurrentLinkedDeque;

public class AddTask implements Runnable {
    private ConcurrentLinkedDeque<String> list;
    
    public AddTask(ConcurrentLinkedDeque<String> list){
        this.list = list;
    }
    
    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        for(int i=0;i<10000;i++){
            list.add(name+": Element "+i);
        }
    }

}

2. 创建名为PoolTask的类,并实现Runnable接口。

import java.util.concurrent.ConcurrentLinkedDeque;

public class PollTask implements Runnable {
    private ConcurrentLinkedDeque<String> list;
    
    public PollTask(ConcurrentLinkedDeque<String> list){
        this.list = list;
    }
    
    @Override
    public void run() {
        for(int i=0;i<5000;i++){
            list.pollFirst();
            list.pollLast();
        }
    }

}

3. 实现范例的主类Main,并添加main()方法。

import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) {    
        ConcurrentLinkedDeque<String> list = new ConcurrentLinkedDeque<>();
        //创建线程数组threads,它包含100个线程
        Thread[] threads = new Thread[100];
        for(int i=0;i<threads.length;i++){
            AddTask task = new AddTask(list);
            threads[i] = new Thread(task);
            threads[i].start();
        }
        System.out.printf("Main: %d AddTask threads have been launched\n", threads.length);
        //使用join()方法等待线程完成
        try {
            for(int i=0;i<threads.length;i++){
                threads[i].join();
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.printf("Main: Size of the List: %d\n", list.size());
        //创建100个PollTask对象及其对应的线程
        for(int i=0;i<threads.length;i++){
            PollTask task = new PollTask(list);
            threads[i] = new Thread(task);
            threads[i].start();
        }
        System.out.printf("Main: %d PollTask threads have been launched\n", threads.length);
        //使用join()方法等待线程完成
        try {
            for(int i=0;i<threads.length;i++){
                threads[i].join();
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.printf("Main: Size of the List: %d\n", list.size());
    }
}

4. 程序运行结果如下

Main: 100 AddTask threads have been launched
Main: Size of the List: 1000000
Main: 100 PollTask threads have been launched
Main: Size of the List: 0

  使用size()方法输出列表中的元素数量。需要注意的是,这个方法返回的值可能不是真实的,尤其当有线程在添加数据或者移除数据时,这个方法需要遍历整个列表来计算元素数量,而遍历过的数据可能已经改变。仅当没有任何线程修改列表时,才能保证返回的结果是准确的。

2. 使用阻塞式线程安全列表

  并发列表允许不同的线程在同一时间添加或者移除列表中的元素,而不会造成数据的不一致。

  在本节,你会学会如何在并发程序中使用阻塞式列表。阻塞式列表与非阻塞式列表的主要差别是:阻塞式列表在插入和删除操作时,如果列表已满或为空,操作不会立即执行,而是将调用这个操作的线程阻塞,直到操作可以执行成功。Java引入了LinkedBlockingDeque类来实现阻塞式列表。

  将要实现的范例包括以下两个不同的任务:

  • 添加数据到一个列表中;
  • 从一个列表中移除数据。

1. 创建名为Client的类,并实现Runnable接口。

import java.util.Date;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;


public class Client implements Runnable {
    private LinkedBlockingDeque<String> requestList;
    
    public Client(LinkedBlockingDeque<String> requestList){
        this.requestList = requestList;
    }
    
    @Override
    public void run() {
        try {
            for(int i=0;i<3;i++){
                for(int j=0;j<5;j++){
                    StringBuilder sb = new StringBuilder();
                    sb.append(i);
                    sb.append(":");
                    sb.append(j);
                    requestList.put(sb.toString());
                    System.out.printf("Client: %s at %s.\n", sb.toString(), new Date());
                }
                TimeUnit.SECONDS.sleep(2);
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Client: End\n");
    }

}

2. 创建范例的主类Main,并添加main()方法。

import java.util.Date;
import java.util.concurrent.LinkedBlockingDeque;

public class Main {

    public static void main(String[] args) {
        //指定固定容量
        LinkedBlockingDeque<String> list = new LinkedBlockingDeque<String>(3);
        Client client = new Client(list);
        Thread thread = new Thread(client);
        thread.start();
        try {
            for(int i=0;i<5;i++){
                for(int j=0;j<3;j++){
                    String request = list.take();
                    System.out.printf("Main: Request: %s at %s. Size: %d\n", request, new Date(), list.size());
                }
                Thread.sleep(300);
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Main: End of the program.");
    }
}

3. 程序运行结果如下

Client: 0:0 at Tue Oct 27 14:43:03 CST 2015.
Main: Request: 0:0 at Tue Oct 27 14:43:03 CST 2015. Size: 0
Main: Request: 0:1 at Tue Oct 27 14:43:03 CST 2015. Size: 0
Client: 0:1 at Tue Oct 27 14:43:03 CST 2015.
Main: Request: 0:2 at Tue Oct 27 14:43:03 CST 2015. Size: 0
Client: 0:2 at Tue Oct 27 14:43:03 CST 2015.
Client: 0:3 at Tue Oct 27 14:43:03 CST 2015.
Client: 0:4 at Tue Oct 27 14:43:03 CST 2015.
Main: Request: 0:3 at Tue Oct 27 14:43:03 CST 2015. Size: 1
Main: Request: 0:4 at Tue Oct 27 14:43:03 CST 2015. Size: 0
Client: 1:0 at Tue Oct 27 14:43:05 CST 2015.
Client: 1:1 at Tue Oct 27 14:43:05 CST 2015.
Client: 1:2 at Tue Oct 27 14:43:05 CST 2015.
Client: 1:3 at Tue Oct 27 14:43:05 CST 2015.
Main: Request: 1:0 at Tue Oct 27 14:43:05 CST 2015. Size: 0
Main: Request: 1:1 at Tue Oct 27 14:43:05 CST 2015. Size: 2
Client: 1:4 at Tue Oct 27 14:43:05 CST 2015.
Main: Request: 1:2 at Tue Oct 27 14:43:05 CST 2015. Size: 2
Main: Request: 1:3 at Tue Oct 27 14:43:05 CST 2015. Size: 1
Main: Request: 1:4 at Tue Oct 27 14:43:05 CST 2015. Size: 0
Client: 2:0 at Tue Oct 27 14:43:07 CST 2015.
Client: 2:1 at Tue Oct 27 14:43:07 CST 2015.
Client: 2:2 at Tue Oct 27 14:43:07 CST 2015.
Client: 2:3 at Tue Oct 27 14:43:07 CST 2015.
Main: Request: 2:0 at Tue Oct 27 14:43:07 CST 2015. Size: 0
Main: Request: 2:1 at Tue Oct 27 14:43:07 CST 2015. Size: 2
Client: 2:4 at Tue Oct 27 14:43:07 CST 2015.
Main: Request: 2:2 at Tue Oct 27 14:43:07 CST 2015. Size: 2
Main: Request: 2:3 at Tue Oct 27 14:43:07 CST 2015. Size: 1
Main: Request: 2:4 at Tue Oct 27 14:43:07 CST 2015. Size: 0
Main: End of the program.
Client: End
View Code

3. 使用按优先级排序的阻塞式线程安全列表

  数据结构应用中的一个经典需求是实现一个有序列表。Java引入了PriorityBlockingQueue类来满足这类需求。

  所有添加进PriorityBlockingQueue的元素必须实现Comparable接口。这个接口提供了compareTo()方法,它的传入参数是一个同类型的对象。这样就有了两个同类型的对象并且相互比较:其中一个是执行这个方法的对象,另一个是参数传入的对象。这个方法必须返回一个数字值,如果当前对象小于参数传入的对象,那么返回一个小于0的值;如果当前对象大于参数传入的对象,那么返回一个大于0的值;如果两个对象相等就返回0。

  当插入元素时,PriorityBlockingQueue使用compareTo()方法来决定插入元素的位置。元素越大越靠后。

  PriorityBlockingQueue的另一个重要特性是:它是阻塞式数据结构(BlockingDataStructure)。当它的方法被调用并且不能立即执行时,调用这个方法的线程将被阻塞知道方法执行成功。

  在本节,我们将学习如何使用PriorityBlockingQueue类。在范例中我们将大量不同优先级的事件存放到同一个列表中,并且检查队列是否按预期排序。

1. 创建名为Event的类并实现Comparable接口,指定Comparable接口的泛型参数是Event类。

public class Event implements Comparable<Event>{
    private int thread; //存放创建了Event的线程
    private int priority;
    
    public Event(int thread, int priority){
        this.thread = thread;
        this.priority = priority;
    }
    
    @Override
    public int compareTo(Event o) {
        if(this.priority>o.priority)
            return -1;
        if(this.priority<o.priority)
            return 1;
        return 0;
    }

    public int getThread() {
        return thread;
    }

    public int getPriority() {
        return priority;
    }
    
    
}

2. 创建一个名为Task的类,实现Runnable接口。

import java.util.concurrent.PriorityBlockingQueue;


public class Task implements Runnable {
    private int id;
    private PriorityBlockingQueue<Event> queue;
    
    public Task(int id, PriorityBlockingQueue<Event> queue){
        this.id = id;
        this.queue = queue;
    }
    
    @Override
    public void run() {
        for(int i=0;i<1000;i++){
            Event event = new Event(id, i);
            queue.add(event);
        }        
    }
    
    
}

3. 创建范例的主类Main,并实现main()方法。

import java.util.concurrent.PriorityBlockingQueue;

public class Main {

    public static void main(String[] args) {
        PriorityBlockingQueue<Event> queue = new PriorityBlockingQueue<>();
        Thread taskThreads[] = new Thread[5];
        for(int i=0;i<taskThreads.length;i++){
            Task task = new Task(i, queue);
            taskThreads[i] = new Thread(task);
        }
        //启动线程
        for(int i=0;i<taskThreads.length;i++){
            taskThreads[i].start();
        }
        //等待线程执行结束
        try {
            for(int i=0;i<taskThreads.length;i++){
                taskThreads[i].join();
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.printf("Main: Queue Size: %d\n", queue.size());
        for(int i=0;i<taskThreads.length*1000;i++){
            Event event = queue.poll();
            System.out.printf("Thread %s: Priority %d\n", event.getThread(), event.getPriority());
        }
        System.out.printf("Main: Queue Size: %d\n", queue.size());
        System.out.println("Main: End of the program.");
    }
}

4. 程序运行结果如下

Main: Queue Size: 5000
Thread 0: Priority 999
Thread 4: Priority 999
Thread 2: Priority 999
Thread 3: Priority 999
Thread 1: Priority 999
Thread 2: Priority 998
Thread 3: Priority 998
Thread 0: Priority 998
Thread 4: Priority 998
Thread 1: Priority 998
Thread 0: Priority 997
Thread 2: Priority 997
Thread 3: Priority 997
Thread 4: Priority 997
Thread 1: Priority 997
Thread 0: Priority 996
Thread 2: Priority 996
Thread 3: Priority 996
Thread 4: Priority 996
Thread 1: Priority 996
Thread 0: Priority 995
Thread 2: Priority 995
Thread 3: Priority 995
Thread 4: Priority 995
Thread 1: Priority 995
Thread 0: Priority 994
Thread 2: Priority 994
Thread 3: Priority 994
Thread 4: Priority 994
Thread 1: Priority 994
Thread 0: Priority 993
Thread 2: Priority 993
Thread 3: Priority 993
Thread 4: Priority 993
Thread 1: Priority 993
Thread 0: Priority 992
Thread 2: Priority 992
Thread 3: Priority 992
Thread 4: Priority 992
Thread 1: Priority 992
Thread 0: Priority 991
Thread 2: Priority 991
Thread 3: Priority 991
Thread 4: Priority 991
Thread 1: Priority 991
Thread 0: Priority 990
Thread 2: Priority 990
Thread 3: Priority 990
Thread 4: Priority 990
Thread 1: Priority 990
Thread 0: Priority 989
Thread 2: Priority 989
Thread 3: Priority 989
Thread 4: Priority 989
Thread 1: Priority 989
Thread 0: Priority 988
Thread 2: Priority 988
Thread 3: Priority 988
Thread 4: Priority 988
Thread 1: Priority 988
Thread 0: Priority 987
Thread 2: Priority 987
Thread 3: Priority 987
Thread 4: Priority 987
Thread 1: Priority 987
Thread 0: Priority 986
Thread 2: Priority 986
Thread 3: Priority 986
Thread 4: Priority 986
Thread 1: Priority 986
Thread 0: Priority 985
Thread 2: Priority 985
Thread 3: Priority 985
Thread 4: Priority 985
Thread 1: Priority 985
Thread 0: Priority 984
Thread 2: Priority 984
Thread 3: Priority 984
Thread 4: Priority 984
Thread 1: Priority 984
Thread 0: Priority 983
Thread 2: Priority 983
Thread 3: Priority 983
Thread 4: Priority 983
Thread 1: Priority 983
Thread 0: Priority 982
Thread 2: Priority 982
Thread 3: Priority 982
Thread 4: Priority 982
Thread 1: Priority 982
Thread 0: Priority 981
Thread 2: Priority 981
Thread 3: Priority 981
Thread 4: Priority 981
Thread 1: Priority 981
Thread 0: Priority 980
Thread 2: Priority 980
Thread 3: Priority 980
Thread 4: Priority 980
Thread 1: Priority 980
Thread 0: Priority 979
Thread 2: Priority 979
Thread 3: Priority 979
Thread 4: Priority 979
Thread 1: Priority 979
Thread 0: Priority 978
Thread 2: Priority 978
Thread 4: Priority 978
Thread 1: Priority 978
Thread 3: Priority 978
Thread 0: Priority 977
Thread 2: Priority 977
Thread 3: Priority 977
Thread 4: Priority 977
Thread 1: Priority 977
Thread 0: Priority 976
Thread 2: Priority 976
Thread 3: Priority 976
Thread 4: Priority 976
Thread 1: Priority 976
Thread 0: Priority 975
Thread 2: Priority 975
Thread 3: Priority 975
Thread 4: Priority 975
Thread 1: Priority 975
Thread 0: Priority 974
Thread 2: Priority 974
Thread 3: Priority 974
Thread 4: Priority 974
Thread 1: Priority 974
Thread 0: Priority 973
Thread 2: Priority 973
Thread 3: Priority 973
Thread 4: Priority 973
Thread 1: Priority 973
Thread 0: Priority 972
Thread 2: Priority 972
Thread 3: Priority 972
Thread 4: Priority 972
Thread 1: Priority 972
Thread 0: Priority 971
Thread 2: Priority 971
Thread 3: Priority 971
Thread 4: Priority 971
Thread 1: Priority 971
Thread 0: Priority 970
Thread 2: Priority 970
Thread 3: Priority 970
Thread 4: Priority 970
Thread 1: Priority 970
Thread 0: Priority 969
Thread 2: Priority 969
Thread 3: Priority 969
Thread 4: Priority 969
Thread 1: Priority 969
Thread 0: Priority 968
Thread 2: Priority 968
Thread 3: Priority 968
Thread 4: Priority 968
Thread 1: Priority 968
Thread 0: Priority 967
Thread 2: Priority 967
Thread 3: Priority 967
Thread 4: Priority 967
Thread 1: Priority 967
Thread 0: Priority 966
Thread 3: Priority 966
Thread 2: Priority 966
Thread 4: Priority 966
Thread 1: Priority 966
Thread 0: Priority 965
Thread 2: Priority 965
Thread 3: Priority 965
Thread 4: Priority 965
Thread 1: Priority 965
Thread 0: Priority 964
Thread 2: Priority 964
Thread 3: Priority 964
Thread 4: Priority 964
Thread 1: Priority 964
Thread 0: Priority 963
Thread 2: Priority 963
Thread 3: Priority 963
Thread 4: Priority 963
Thread 1: Priority 963
Thread 0: Priority 962
Thread 2: Priority 962
Thread 3: Priority 962
Thread 4: Priority 962
Thread 1: Priority 962
Thread 0: Priority 961
Thread 2: Priority 961
Thread 3: Priority 961
Thread 4: Priority 961
Thread 1: Priority 961
Thread 0: Priority 960
Thread 2: Priority 960
Thread 3: Priority 960
Thread 4: Priority 960
Thread 1: Priority 960
Thread 0: Priority 959
Thread 2: Priority 959
Thread 3: Priority 959
Thread 4: Priority 959
Thread 1: Priority 959
Thread 0: Priority 958
Thread 2: Priority 958
Thread 4: Priority 958
Thread 1: Priority 958
Thread 3: Priority 958
Thread 0: Priority 957
Thread 2: Priority 957
Thread 3: Priority 957
Thread 4: Priority 957
Thread 1: Priority 957
Thread 0: Priority 956
Thread 2: Priority 956
Thread 3: Priority 956
Thread 4: Priority 956
Thread 1: Priority 956
Thread 0: Priority 955
Thread 2: Priority 955
Thread 3: Priority 955
Thread 4: Priority 955
Thread 1: Priority 955
Thread 0: Priority 954
Thread 2: Priority 954
Thread 3: Priority 954
Thread 4: Priority 954
Thread 1: Priority 954
Thread 0: Priority 953
Thread 2: Priority 953
Thread 3: Priority 953
Thread 4: Priority 953
Thread 1: Priority 953
Thread 0: Priority 952
Thread 2: Priority 952
Thread 3: Priority 952
Thread 4: Priority 952
Thread 1: Priority 952
Thread 0: Priority 951
Thread 2: Priority 951
Thread 3: Priority 951
Thread 4: Priority 951
Thread 1: Priority 951
Thread 0: Priority 950
Thread 2: Priority 950
Thread 4: Priority 950
Thread 3: Priority 950
Thread 1: Priority 950
Thread 0: Priority 949
Thread 2: Priority 949
Thread 3: Priority 949
Thread 4: Priority 949
Thread 1: Priority 949
Thread 0: Priority 948
Thread 2: Priority 948
Thread 3: Priority 948
Thread 4: Priority 948
Thread 1: Priority 948
Thread 0: Priority 947
Thread 2: Priority 947
Thread 3: Priority 947
Thread 4: Priority 947
Thread 1: Priority 947
Thread 0: Priority 946
Thread 3: Priority 946
Thread 2: Priority 946
Thread 4: Priority 946
Thread 1: Priority 946
Thread 0: Priority 945
Thread 2: Priority 945
Thread 3: Priority 945
Thread 4: Priority 945
Thread 1: Priority 945
Thread 0: Priority 944
Thread 2: Priority 944
Thread 3: Priority 944
Thread 4: Priority 944
Thread 1: Priority 944
Thread 0: Priority 943
Thread 2: Priority 943
Thread 3: Priority 943
Thread 4: Priority 943
Thread 1: Priority 943
Thread 0: Priority 942
Thread 2: Priority 942
Thread 3: Priority 942
Thread 4: Priority 942
Thread 1: Priority 942
Thread 0: Priority 941
Thread 2: Priority 941
Thread 3: Priority 941
Thread 4: Priority 941
Thread 1: Priority 941
Thread 0: Priority 940
Thread 2: Priority 940
Thread 3: Priority 940
Thread 4: Priority 940
Thread 1: Priority 940
Thread 0: Priority 939
Thread 2: Priority 939
Thread 3: Priority 939
Thread 4: Priority 939
Thread 1: Priority 939
Thread 0: Priority 938
Thread 2: Priority 938
Thread 3: Priority 938
Thread 4: Priority 938
Thread 1: Priority 938
Thread 0: Priority 937
Thread 2: Priority 937
Thread 3: Priority 937
Thread 4: Priority 937
Thread 1: Priority 937
Thread 0: Priority 936
Thread 2: Priority 936
Thread 3: Priority 936
Thread 4: Priority 936
Thread 1: Priority 936
Thread 0: Priority 935
Thread 2: Priority 935
Thread 3: Priority 935
Thread 4: Priority 935
Thread 1: Priority 935
Thread 0: Priority 934
Thread 2: Priority 934
Thread 3: Priority 934
Thread 4: Priority 934
Thread 1: Priority 934
Thread 0: Priority 933
Thread 2: Priority 933
Thread 3: Priority 933
Thread 4: Priority 933
Thread 1: Priority 933
Thread 0: Priority 932
Thread 2: Priority 932
Thread 3: Priority 932
Thread 4: Priority 932
Thread 1: Priority 932
Thread 0: Priority 931
Thread 2: Priority 931
Thread 3: Priority 931
Thread 4: Priority 931
Thread 1: Priority 931
Thread 0: Priority 930
Thread 2: Priority 930
Thread 4: Priority 930
Thread 3: Priority 930
Thread 1: Priority 930
Thread 0: Priority 929
Thread 2: Priority 929
Thread 3: Priority 929
Thread 4: Priority 929
Thread 1: Priority 929
Thread 0: Priority 928
Thread 2: Priority 928
Thread 3: Priority 928
Thread 4: Priority 928
Thread 1: Priority 928
Thread 0: Priority 927
Thread 2: Priority 927
Thread 3: Priority 927
Thread 4: Priority 927
Thread 1: Priority 927
Thread 0: Priority 926
Thread 3: Priority 926
Thread 2: Priority 926
Thread 4: Priority 926
Thread 1: Priority 926
Thread 0: Priority 925
Thread 2: Priority 925
Thread 3: Priority 925
Thread 4: Priority 925
Thread 1: Priority 925
Thread 0: Priority 924
Thread 2: Priority 924
Thread 3: Priority 924
Thread 4: Priority 924
Thread 1: Priority 924
Thread 0: Priority 923
Thread 2: Priority 923
Thread 3: Priority 923
Thread 4: Priority 923
Thread 1: Priority 923
Thread 0: Priority 922
Thread 2: Priority 922
Thread 3: Priority 922
Thread 4: Priority 922
Thread 1: Priority 922
Thread 0: Priority 921
Thread 2: Priority 921
Thread 3: Priority 921
Thread 4: Priority 921
Thread 1: Priority 921
Thread 0: Priority 920
Thread 2: Priority 920
Thread 3: Priority 920
Thread 4: Priority 920
Thread 1: Priority 920
Thread 0: Priority 919
Thread 2: Priority 919
Thread 3: Priority 919
Thread 4: Priority 919
Thread 1: Priority 919
Thread 0: Priority 918
Thread 2: Priority 918
Thread 4: Priority 918
Thread 1: Priority 918
Thread 3: Priority 918
Thread 0: Priority 917
Thread 2: Priority 917
Thread 3: Priority 917
Thread 4: Priority 917
Thread 1: Priority 917
Thread 0: Priority 916
Thread 2: Priority 916
Thread 3: Priority 916
Thread 4: Priority 916
Thread 1: Priority 916
Thread 0: Priority 915
Thread 2: Priority 915
Thread 3: Priority 915
Thread 4: Priority 915
Thread 1: Priority 915
Thread 0: Priority 914
Thread 2: Priority 914
Thread 3: Priority 914
Thread 4: Priority 914
Thread 1: Priority 914
Thread 0: Priority 913
Thread 2: Priority 913
Thread 3: Priority 913
Thread 4: Priority 913
Thread 1: Priority 913
Thread 0: Priority 912
Thread 2: Priority 912
Thread 3: Priority 912
Thread 4: Priority 912
Thread 1: Priority 912
Thread 0: Priority 911
Thread 2: Priority 911
Thread 3: Priority 911
Thread 4: Priority 911
Thread 1: Priority 911
Thread 0: Priority 910
Thread 2: Priority 910
Thread 4: Priority 910
Thread 3: Priority 910
Thread 1: Priority 910
Thread 0: Priority 909
Thread 3: Priority 909
Thread 4: Priority 909
Thread 2: Priority 909
Thread 1: Priority 909
Thread 0: Priority 908
Thread 2: Priority 908
Thread 3: Priority 908
Thread 4: Priority 908
Thread 1: Priority 908
Thread 0: Priority 907
Thread 2: Priority 907
Thread 3: Priority 907
Thread 4: Priority 907
Thread 1: Priority 907
Thread 0: Priority 906
Thread 2: Priority 906
Thread 3: Priority 906
Thread 4: Priority 906
Thread 1: Priority 906
Thread 0: Priority 905
Thread 2: Priority 905
Thread 3: Priority 905
Thread 4: Priority 905
Thread 1: Priority 905
Thread 0: Priority 904
Thread 2: Priority 904
Thread 3: Priority 904
Thread 4: Priority 904
Thread 1: Priority 904
Thread 0: Priority 903
Thread 3: Priority 903
Thread 4: Priority 903
Thread 1: Priority 903
Thread 2: Priority 903
Thread 0: Priority 902
Thread 2: Priority 902
Thread 3: Priority 902
Thread 4: Priority 902
Thread 1: Priority 902
Thread 0: Priority 901
Thread 2: Priority 901
Thread 3: Priority 901
Thread 4: Priority 901
Thread 1: Priority 901
Thread 0: Priority 900
Thread 2: Priority 900
Thread 3: Priority 900
Thread 4: Priority 900
Thread 1: Priority 900
Thread 2: Priority 899
Thread 3: Priority 899
Thread 4: Priority 899
Thread 1: Priority 899
Thread 0: Priority 899
Thread 2: Priority 898
Thread 4: Priority 898
Thread 1: Priority 898
Thread 3: Priority 898
Thread 0: Priority 898
Thread 2: Priority 897
Thread 3: Priority 897
Thread 4: Priority 897
Thread 1: Priority 897
Thread 0: Priority 897
Thread 2: Priority 896
Thread 3: Priority 896
Thread 4: Priority 896
Thread 1: Priority 896
Thread 0: Priority 896
Thread 2: Priority 895
Thread 3: Priority 895
Thread 4: Priority 895
Thread 1: Priority 895
Thread 0: Priority 895
Thread 2: Priority 894
Thread 3: Priority 894
Thread 4: Priority 894
Thread 1: Priority 894
Thread 0: Priority 894
Thread 2: Priority 893
Thread 3: Priority 893
Thread 4: Priority 893
Thread 1: Priority 893
Thread 0: Priority 893
Thread 2: Priority 892
Thread 3: Priority 892
Thread 4: Priority 892
Thread 1: Priority 892
Thread 0: Priority 892
Thread 2: Priority 891
Thread 3: Priority 891
Thread 4: Priority 891
Thread 1: Priority 891
Thread 0: Priority 891
Thread 2: Priority 890
Thread 3: Priority 890
Thread 4: Priority 890
Thread 1: Priority 890
Thread 0: Priority 890
Thread 3: Priority 889
Thread 4: Priority 889
Thread 2: Priority 889
Thread 1: Priority 889
Thread 0: Priority 889
Thread 2: Priority 888
Thread 3: Priority 888
Thread 4: Priority 888
Thread 1: Priority 888
Thread 0: Priority 888
Thread 2: Priority 887
Thread 3: Priority 887
Thread 4: Priority 887
Thread 1: Priority 887
Thread 0: Priority 887
Thread 2: Priority 886
Thread 4: Priority 886
Thread 3: Priority 886
Thread 1: Priority 886
Thread 0: Priority 886
Thread 2: Priority 885
Thread 3: Priority 885
Thread 4: Priority 885
Thread 1: Priority 885
Thread 0: Priority 885
Thread 2: Priority 884
Thread 3: Priority 884
Thread 4: Priority 884
Thread 1: Priority 884
Thread 0: Priority 884
Thread 2: Priority 883
Thread 3: Priority 883
Thread 4: Priority 883
Thread 1: Priority 883
Thread 0: Priority 883
Thread 2: Priority 882
Thread 3: Priority 882
Thread 4: Priority 882
Thread 1: Priority 882
Thread 0: Priority 882
Thread 2: Priority 881
Thread 3: Priority 881
Thread 4: Priority 881
Thread 1: Priority 881
Thread 0: Priority 881
Thread 3: Priority 880
Thread 4: Priority 880
Thread 1: Priority 880
Thread 2: Priority 880
Thread 0: Priority 880
Thread 2: Priority 879
Thread 3: Priority 879
Thread 4: Priority 879
Thread 1: Priority 879
Thread 0: Priority 879
Thread 2: Priority 878
Thread 4: Priority 878
Thread 1: Priority 878
Thread 3: Priority 878
Thread 0: Priority 878
Thread 2: Priority 877
Thread 3: Priority 877
Thread 4: Priority 877
Thread 1: Priority 877
Thread 0: Priority 877
Thread 2: Priority 876
Thread 3: Priority 876
Thread 4: Priority 876
Thread 1: Priority 876
Thread 0: Priority 876
Thread 2: Priority 875
Thread 3: Priority 875
Thread 4: Priority 875
Thread 1: Priority 875
Thread 0: Priority 875
Thread 2: Priority 874
Thread 3: Priority 874
Thread 4: Priority 874
Thread 1: Priority 874
Thread 0: Priority 874
Thread 2: Priority 873
Thread 3: Priority 873
Thread 4: Priority 873
Thread 1: Priority 873
Thread 0: Priority 873
Thread 2: Priority 872
Thread 3: Priority 872
Thread 4: Priority 872
Thread 1: Priority 872
Thread 0: Priority 872
Thread 2: Priority 871
Thread 3: Priority 871
Thread 4: Priority 871
Thread 1: Priority 871
Thread 0: Priority 871
Thread 2: Priority 870
Thread 4: Priority 870
Thread 3: Priority 870
Thread 1: Priority 870
Thread 0: Priority 870
Thread 2: Priority 869
Thread 3: Priority 869
Thread 4: Priority 869
Thread 1: Priority 869
Thread 0: Priority 869
Thread 2: Priority 868
Thread 3: Priority 868
Thread 4: Priority 868
Thread 1: Priority 868
Thread 0: Priority 868
Thread 2: Priority 867
Thread 3: Priority 867
Thread 4: Priority 867
Thread 1: Priority 867
Thread 0: Priority 867
Thread 3: Priority 866
Thread 2: Priority 866
Thread 4: Priority 866
Thread 1: Priority 866
Thread 0: Priority 866
Thread 2: Priority 865
Thread 3: Priority 865
Thread 4: Priority 865
Thread 1: Priority 865
Thread 0: Priority 865
Thread 2: Priority 864
Thread 3: Priority 864
Thread 4: Priority 864
Thread 1: Priority 864
Thread 0: Priority 864
Thread 2: Priority 863
Thread 3: Priority 863
Thread 4: Priority 863
Thread 1: Priority 863
Thread 0: Priority 863
Thread 2: Priority 862
Thread 3: Priority 862
Thread 4: Priority 862
Thread 1: Priority 862
Thread 0: Priority 862
Thread 2: Priority 861
Thread 3: Priority 861
Thread 4: Priority 861
Thread 1: Priority 861
Thread 0: Priority 861
Thread 2: Priority 860
Thread 3: Priority 860
Thread 4: Priority 860
Thread 1: Priority 860
Thread 0: Priority 860
Thread 2: Priority 859
Thread 3: Priority 859
Thread 4: Priority 859
Thread 1: Priority 859
Thread 0: Priority 859
Thread 2: Priority 858
Thread 3: Priority 858
Thread 4: Priority 858
Thread 1: Priority 858
Thread 0: Priority 858
Thread 3: Priority 857
Thread 4: Priority 857
Thread 1: Priority 857
Thread 2: Priority 857
Thread 0: Priority 857
Thread 2: Priority 856
Thread 3: Priority 856
Thread 4: Priority 856
Thread 1: Priority 856
Thread 0: Priority 856
Thread 2: Priority 855
Thread 3: Priority 855
Thread 4: Priority 855
Thread 1: Priority 855
Thread 0: Priority 855
Thread 2: Priority 854
Thread 3: Priority 854
Thread 4: Priority 854
Thread 1: Priority 854
Thread 0: Priority 854
Thread 2: Priority 853
Thread 3: Priority 853
Thread 4: Priority 853
Thread 1: Priority 853
Thread 0: Priority 853
Thread 4: Priority 852
Thread 2: Priority 852
Thread 3: Priority 852
Thread 1: Priority 852
Thread 0: Priority 852
Thread 2: Priority 851
Thread 3: Priority 851
Thread 4: Priority 851
Thread 1: Priority 851
Thread 0: Priority 851
Thread 2: Priority 850
Thread 3: Priority 850
Thread 4: Priority 850
Thread 1: Priority 850
Thread 0: Priority 850
Thread 2: Priority 849
Thread 3: Priority 849
Thread 4: Priority 849
Thread 1: Priority 849
Thread 0: Priority 849
Thread 3: Priority 848
Thread 2: Priority 848
Thread 4: Priority 848
Thread 1: Priority 848
Thread 0: Priority 848
Thread 2: Priority 847
Thread 3: Priority 847
Thread 4: Priority 847
Thread 1: Priority 847
Thread 0: Priority 847
Thread 2: Priority 846
Thread 3: Priority 846
Thread 4: Priority 846
Thread 1: Priority 846
Thread 0: Priority 846
Thread 2: Priority 845
Thread 3: Priority 845
Thread 4: Priority 845
Thread 1: Priority 845
Thread 0: Priority 845
Thread 3: Priority 844
Thread 2: Priority 844
Thread 4: Priority 844
Thread 1: Priority 844
Thread 0: Priority 844
Thread 2: Priority 843
Thread 3: Priority 843
Thread 4: Priority 843
Thread 1: Priority 843
Thread 0: Priority 843
Thread 2: Priority 842
Thread 3: Priority 842
Thread 4: Priority 842
Thread 1: Priority 842
Thread 0: Priority 842
Thread 2: Priority 841
Thread 3: Priority 841
Thread 4: Priority 841
Thread 1: Priority 841
Thread 0: Priority 841
Thread 2: Priority 840
Thread 4: Priority 840
Thread 1: Priority 840
Thread 3: Priority 840
Thread 0: Priority 840
Thread 3: Priority 839
Thread 4: Priority 839
Thread 1: Priority 839
Thread 2: Priority 839
Thread 0: Priority 839
Thread 2: Priority 838
Thread 3: Priority 838
Thread 4: Priority 838
Thread 1: Priority 838
Thread 0: Priority 838
Thread 2: Priority 837
Thread 3: Priority 837
Thread 4: Priority 837
Thread 1: Priority 837
Thread 0: Priority 837
Thread 2: Priority 836
Thread 3: Priority 836
Thread 4: Priority 836
Thread 1: Priority 836
Thread 0: Priority 836
Thread 2: Priority 835
Thread 3: Priority 835
Thread 4: Priority 835
Thread 1: Priority 835
Thread 0: Priority 835
Thread 2: Priority 834
Thread 3: Priority 834
Thread 4: Priority 834
Thread 1: Priority 834
Thread 0: Priority 834
Thread 2: Priority 833
Thread 3: Priority 833
Thread 4: Priority 833
Thread 1: Priority 833
Thread 0: Priority 833
Thread 2: Priority 832
Thread 4: Priority 832
Thread 3: Priority 832
Thread 1: Priority 832
Thread 0: Priority 832
Thread 2: Priority 831
Thread 3: Priority 831
Thread 4: Priority 831
Thread 1: Priority 831
Thread 0: Priority 831
Thread 2: Priority 830
Thread 3: Priority 830
Thread 4: Priority 830
Thread 1: Priority 830
Thread 0: Priority 830
Thread 2: Priority 829
Thread 3: Priority 829
Thread 4: Priority 829
Thread 1: Priority 829
Thread 0: Priority 829
Thread 2: Priority 828
Thread 3: Priority 828
Thread 4: Priority 828
Thread 1: Priority 828
Thread 0: Priority 828
Thread 2: Priority 827
Thread 3: Priority 827
Thread 4: Priority 827
Thread 1: Priority 827
Thread 0: Priority 827
Thread 2: Priority 826
Thread 3: Priority 826
Thread 4: Priority 826
Thread 1: Priority 826
Thread 0: Priority 826
Thread 2: Priority 825
Thread 3: Priority 825
Thread 4: Priority 825
Thread 1: Priority 825
Thread 0: Priority 825
Thread 2: Priority 824
Thread 3: Priority 824
Thread 4: Priority 824
Thread 1: Priority 824
Thread 0: Priority 824
Thread 2: Priority 823
Thread 3: Priority 823
Thread 4: Priority 823
Thread 1: Priority 823
Thread 0: Priority 823
Thread 2: Priority 822
Thread 3: Priority 822
Thread 4: Priority 822
Thread 1: Priority 822
Thread 0: Priority 822
Thread 2: Priority 821
Thread 3: Priority 821
Thread 4: Priority 821
Thread 1: Priority 821
Thread 0: Priority 821
Thread 2: Priority 820
Thread 4: Priority 820
Thread 1: Priority 820
Thread 3: Priority 820
Thread 0: Priority 820
Thread 2: Priority 819
Thread 3: Priority 819
Thread 4: Priority 819
Thread 1: Priority 819
Thread 0: Priority 819
Thread 2: Priority 818
Thread 3: Priority 818
Thread 4: Priority 818
Thread 1: Priority 818
Thread 0: Priority 818
Thread 3: Priority 817
Thread 4: Priority 817
Thread 2: Priority 817
Thread 1: Priority 817
Thread 0: Priority 817
Thread 2: Priority 816
Thread 3: Priority 816
Thread 4: Priority 816
Thread 1: Priority 816
Thread 0: Priority 816
Thread 2: Priority 815
Thread 3: Priority 815
Thread 4: Priority 815
Thread 1: Priority 815
Thread 0: Priority 815
Thread 2: Priority 814
Thread 3: Priority 814
Thread 4: Priority 814
Thread 1: Priority 814
Thread 0: Priority 814
Thread 2: Priority 813
Thread 3: Priority 813
Thread 4: Priority 813
Thread 1: Priority 813
Thread 0: Priority 813
Thread 2: Priority 812
Thread 3: Priority 812
Thread 4: Priority 812
Thread 1: Priority 812
Thread 0: Priority 812
Thread 2: Priority 811
Thread 3: Priority 811
Thread 4: Priority 811
Thread 1: Priority 811
Thread 0: Priority 811
Thread 3: Priority 810
Thread 2: Priority 810
Thread 4: Priority 810
Thread 1: Priority 810
Thread 0: Priority 810
Thread 2: Priority 809
Thread 3: Priority 809
Thread 4: Priority 809
Thread 1: Priority 809
Thread 0: Priority 809
Thread 3: Priority 808
Thread 2: Priority 808
Thread 4: Priority 808
Thread 1: Priority 808
Thread 0: Priority 808
Thread 2: Priority 807
Thread 3: Priority 807
Thread 4: Priority 807
Thread 1: Priority 807
Thread 0: Priority 807
Thread 2: Priority 806
Thread 3: Priority 806
Thread 4: Priority 806
Thread 1: Priority 806
Thread 0: Priority 806
Thread 2: Priority 805
Thread 3: Priority 805
Thread 4: Priority 805
Thread 1: Priority 805
Thread 0: Priority 805
Thread 2: Priority 804
Thread 3: Priority 804
Thread 4: Priority 804
Thread 1: Priority 804
Thread 0: Priority 804
Thread 2: Priority 803
Thread 3: Priority 803
Thread 4: Priority 803
Thread 1: Priority 803
Thread 0: Priority 803
Thread 2: Priority 802
Thread 3: Priority 802
Thread 4: Priority 802
Thread 1: Priority 802
Thread 0: Priority 802
Thread 3: Priority 801
Thread 4: Priority 801
Thread 1: Priority 801
Thread 2: Priority 801
Thread 0: Priority 801
Thread 2: Priority 800
Thread 4: Priority 800
Thread 1: Priority 800
Thread 3: Priority 800
Thread 0: Priority 800
Thread 2: Priority 799
Thread 3: Priority 799
Thread 4: Priority 799
Thread 1: Priority 799
Thread 0: Priority 799
Thread 2: Priority 798
Thread 3: Priority 798
Thread 4: Priority 798
Thread 1: Priority 798
Thread 0: Priority 798
Thread 2: Priority 797
Thread 3: Priority 797
Thread 4: Priority 797
Thread 1: Priority 797
Thread 0: Priority 797
Thread 2: Priority 796
Thread 3: Priority 796
Thread 4: Priority 796
Thread 1: Priority 796
Thread 0: Priority 796
Thread 2: Priority 795
Thread 3: Priority 795
Thread 4: Priority 795
Thread 1: Priority 795
Thread 0: Priority 795
Thread 2: Priority 794
Thread 3: Priority 794
Thread 4: Priority 794
Thread 1: Priority 794
Thread 0: Priority 794
Thread 2: Priority 793
Thread 4: Priority 793
Thread 3: Priority 793
Thread 1: Priority 793
Thread 0: Priority 793
Thread 2: Priority 792
Thread 3: Priority 792
Thread 4: Priority 792
Thread 1: Priority 792
Thread 0: Priority 792
Thread 2: Priority 791
Thread 3: Priority 791
Thread 4: Priority 791
Thread 1: Priority 791
Thread 0: Priority 791
Thread 2: Priority 790
Thread 3: Priority 790
Thread 4: Priority 790
Thread 1: Priority 790
Thread 0: Priority 790
Thread 2: Priority 789
Thread 4: Priority 789
Thread 3: Priority 789
Thread 1: Priority 789
Thread 0: Priority 789
Thread 2: Priority 788
Thread 3: Priority 788
Thread 4: Priority 788
Thread 1: Priority 788
Thread 0: Priority 788
Thread 3: Priority 787
Thread 4: Priority 787
Thread 2: Priority 787
Thread 1: Priority 787
Thread 0: Priority 787
Thread 2: Priority 786
Thread 3: Priority 786
Thread 4: Priority 786
Thread 1: Priority 786
Thread 0: Priority 786
Thread 2: Priority 785
Thread 3: Priority 785
Thread 4: Priority 785
Thread 1: Priority 785
Thread 0: Priority 785
Thread 2: Priority 784
Thread 3: Priority 784
Thread 4: Priority 784
Thread 1: Priority 784
Thread 0: Priority 784
Thread 2: Priority 783
Thread 3: Priority 783
Thread 4: Priority 783
Thread 1: Priority 783
Thread 0: Priority 783
Thread 2: Priority 782
Thread 3: Priority 782
Thread 4: Priority 782
Thread 1: Priority 782
Thread 0: Priority 782
Thread 2: Priority 781
Thread 3: Priority 781
Thread 4: Priority 781
Thread 1: Priority 781
Thread 0: Priority 781
Thread 2: Priority 780
Thread 3: Priority 780
Thread 4: Priority 780
Thread 1: Priority 780
Thread 0: Priority 780
Thread 2: Priority 779
Thread 3: Priority 779
Thread 4: Priority 779
Thread 1: Priority 779
Thread 0: Priority 779
Thread 2: Priority 778
Thread 3: Priority 778
Thread 4: Priority 778
Thread 1: Priority 778
Thread 0: Priority 778
Thread 2: Priority 777
Thread 3: Priority 777
Thread 4: Priority 777
Thread 1: Priority 777
Thread 0: Priority 777
Thread 2: Priority 776
Thread 3: Priority 776
Thread 4: Priority 776
Thread 1: Priority 776
Thread 0: Priority 776
Thread 2: Priority 775
Thread 3: Priority 775
Thread 4: Priority 775
Thread 1: Priority 775
Thread 0: Priority 775
Thread 2: Priority 774
Thread 3: Priority 774
Thread 4: Priority 774
Thread 1: Priority 774
Thread 0: Priority 774
Thread 4: Priority 773
Thread 3: Priority 773
Thread 1: Priority 773
Thread 0: Priority 773
Thread 2: Priority 773
Thread 2: Priority 772
Thread 3: Priority 772
Thread 4: Priority 772
Thread 1: Priority 772
Thread 0: Priority 772
Thread 2: Priority 771
Thread 3: Priority 771
Thread 4: Priority 771
Thread 1: Priority 771
Thread 0: Priority 771
Thread 2: Priority 770
Thread 3: Priority 770
Thread 4: Priority 770
Thread 1: Priority 770
Thread 0: Priority 770
Thread 3: Priority 769
Thread 2: Priority 769
Thread 4: Priority 769
Thread 1: Priority 769
Thread 0: Priority 769
Thread 2: Priority 768
Thread 3: Priority 768
Thread 4: Priority 768
Thread 1: Priority 768
Thread 0: Priority 768
Thread 2: Priority 767
Thread 3: Priority 767
Thread 4: Priority 767
Thread 1: Priority 767
Thread 0: Priority 767
Thread 2: Priority 766
Thread 3: Priority 766
Thread 4: Priority 766
Thread 1: Priority 766
Thread 0: Priority 766
Thread 2: Priority 765
Thread 3: Priority 765
Thread 4: Priority 765
Thread 1: Priority 765
Thread 0: Priority 765
Thread 2: Priority 764
Thread 3: Priority 764
Thread 4: Priority 764
Thread 1: Priority 764
Thread 0: Priority 764
Thread 2: Priority 763
Thread 3: Priority 763
Thread 4: Priority 763
Thread 1: Priority 763
Thread 0: Priority 763
Thread 2: Priority 762
Thread 3: Priority 762
Thread 4: Priority 762
Thread 1: Priority 762
Thread 0: Priority 762
Thread 2: Priority 761
Thread 3: Priority 761
Thread 4: Priority 761
Thread 1: Priority 761
Thread 0: Priority 761
Thread 2: Priority 760
Thread 3: Priority 760
Thread 4: Priority 760
Thread 1: Priority 760
Thread 0: Priority 760
Thread 2: Priority 759
Thread 3: Priority 759
Thread 4: Priority 759
Thread 1: Priority 759
Thread 0: Priority 759
Thread 3: Priority 758
Thread 4: Priority 758
Thread 1: Priority 758
Thread 2: Priority 758
Thread 0: Priority 758
Thread 2: Priority 757
Thread 3: Priority 757
Thread 4: Priority 757
Thread 1: Priority 757
Thread 0: Priority 757
Thread 3: Priority 756
Thread 2: Priority 756
Thread 4: Priority 756
Thread 1: Priority 756
Thread 0: Priority 756
Thread 2: Priority 755
Thread 3: Priority 755
Thread 4: Priority 755
Thread 1: Priority 755
Thread 0: Priority 755
Thread 2: Priority 754
Thread 3: Priority 754
Thread 4: Priority 754
Thread 1: Priority 754
Thread 0: Priority 754
Thread 2: Priority 753
Thread 3: Priority 753
Thread 4: Priority 753
Thread 1: Priority 753
Thread 0: Priority 753
Thread 2: Priority 752
Thread 4: Priority 752
Thread 1: Priority 752
Thread 3: Priority 752
Thread 0: Priority 752
Thread 2: Priority 751
Thread 3: Priority 751
Thread 4: Priority 751
Thread 1: Priority 751
Thread 0: Priority 751
Thread 2: Priority 750
Thread 3: Priority 750
Thread 4: Priority 750
Thread 1: Priority 750
Thread 0: Priority 750
Thread 2: Priority 749
Thread 4: Priority 749
Thread 3: Priority 749
Thread 1: Priority 749
Thread 0: Priority 749
Thread 2: Priority 748
Thread 3: Priority 748
Thread 4: Priority 748
Thread 1: Priority 748
Thread 0: Priority 748
Thread 2: Priority 747
Thread 3: Priority 747
Thread 4: Priority 747
Thread 1: Priority 747
Thread 0: Priority 747
Thread 2: Priority 746
Thread 3: Priority 746
Thread 4: Priority 746
Thread 1: Priority 746
Thread 0: Priority 746
Thread 2: Priority 745
Thread 3: Priority 745
Thread 4: Priority 745
Thread 1: Priority 745
Thread 0: Priority 745
Thread 2: Priority 744
Thread 3: Priority 744
Thread 4: Priority 744
Thread 1: Priority 744
Thread 0: Priority 744
Thread 2: Priority 743
Thread 3: Priority 743
Thread 4: Priority 743
Thread 1: Priority 743
Thread 0: Priority 743
Thread 2: Priority 742
Thread 4: Priority 742
Thread 1: Priority 742
Thread 3: Priority 742
Thread 0: Priority 742
Thread 2: Priority 741
Thread 3: Priority 741
Thread 4: Priority 741
Thread 1: Priority 741
Thread 0: Priority 741
Thread 2: Priority 740
Thread 3: Priority 740
Thread 4: Priority 740
Thread 1: Priority 740
Thread 0: Priority 740
Thread 2: Priority 739
Thread 3: Priority 739
Thread 4: Priority 739
Thread 1: Priority 739
Thread 0: Priority 739
Thread 2: Priority 738
Thread 3: Priority 738
Thread 4: Priority 738
Thread 1: Priority 738
Thread 0: Priority 738
Thread 2: Priority 737
Thread 3: Priority 737
Thread 4: Priority 737
Thread 1: Priority 737
Thread 0: Priority 737
Thread 2: Priority 736
Thread 3: Priority 736
Thread 4: Priority 736
Thread 1: Priority 736
Thread 0: Priority 736
Thread 2: Priority 735
Thread 3: Priority 735
Thread 4: Priority 735
Thread 1: Priority 735
Thread 0: Priority 735
Thread 2: Priority 734
Thread 3: Priority 734
Thread 4: Priority 734
Thread 1: Priority 734
Thread 0: Priority 734
Thread 2: Priority 733
Thread 3: Priority 733
Thread 4: Priority 733
Thread 1: Priority 733
Thread 0: Priority 733
Thread 2: Priority 732
Thread 3: Priority 732
Thread 4: Priority 732
Thread 1: Priority 732
Thread 0: Priority 732
Thread 2: Priority 731
Thread 3: Priority 731
Thread 4: Priority 731
Thread 1: Priority 731
Thread 0: Priority 731
Thread 2: Priority 730
Thread 3: Priority 730
Thread 4: Priority 730
Thread 1: Priority 730
Thread 0: Priority 730
Thread 2: Priority 729
Thread 4: Priority 729
Thread 3: Priority 729
Thread 1: Priority 729
Thread 0: Priority 729
Thread 2: Priority 728
Thread 3: Priority 728
Thread 4: Priority 728
Thread 1: Priority 728
Thread 0: Priority 728
Thread 3: Priority 727
Thread 4: Priority 727
Thread 2: Priority 727
Thread 1: Priority 727
Thread 0: Priority 727
Thread 2: Priority 726
Thread 3: Priority 726
Thread 4: Priority 726
Thread 1: Priority 726
Thread 0: Priority 726
Thread 3: Priority 725
Thread 2: Priority 725
Thread 4: Priority 725
Thread 1: Priority 725
Thread 0: Priority 725
Thread 2: Priority 724
Thread 3: Priority 724
Thread 4: Priority 724
Thread 1: Priority 724
Thread 0: Priority 724
Thread 2: Priority 723
Thread 3: Priority 723
Thread 4: Priority 723
Thread 1: Priority 723
Thread 0: Priority 723
Thread 2: Priority 722
Thread 3: Priority 722
Thread 4: Priority 722
Thread 1: Priority 722
Thread 0: Priority 722
Thread 2: Priority 721
Thread 3: Priority 721
Thread 4: Priority 721
Thread 1: Priority 721
Thread 0: Priority 721
Thread 2: Priority 720
Thread 3: Priority 720
Thread 4: Priority 720
Thread 1: Priority 720
Thread 0: Priority 720
Thread 2: Priority 719
Thread 3: Priority 719
Thread 4: Priority 719
Thread 1: Priority 719
Thread 0: Priority 719
Thread 2: Priority 718
Thread 3: Priority 718
Thread 4: Priority 718
Thread 1: Priority 718
Thread 0: Priority 718
Thread 2: Priority 717
Thread 3: Priority 717
Thread 4: Priority 717
Thread 1: Priority 717
Thread 0: Priority 717
Thread 2: Priority 716
Thread 3: Priority 716
Thread 4: Priority 716
Thread 1: Priority 716
Thread 0: Priority 716
Thread 2: Priority 715
Thread 3: Priority 715
Thread 4: Priority 715
Thread 1: Priority 715
Thread 0: Priority 715
Thread 2: Priority 714
Thread 3: Priority 714
Thread 4: Priority 714
Thread 1: Priority 714
Thread 0: Priority 714
Thread 2: Priority 713
Thread 3: Priority 713
Thread 4: Priority 713
Thread 1: Priority 713
Thread 0: Priority 713
Thread 2: Priority 712
Thread 4: Priority 712
Thread 3: Priority 712
Thread 1: Priority 712
Thread 0: Priority 712
Thread 2: Priority 711
Thread 3: Priority 711
Thread 4: Priority 711
Thread 1: Priority 711
Thread 0: Priority 711
Thread 2: Priority 710
Thread 3: Priority 710
Thread 4: Priority 710
Thread 1: Priority 710
Thread 0: Priority 710
Thread 2: Priority 709
Thread 4: Priority 709
Thread 1: Priority 709
Thread 3: Priority 709
Thread 0: Priority 709
Thread 2: Priority 708
Thread 3: Priority 708
Thread 4: Priority 708
Thread 1: Priority 708
Thread 0: Priority 708
Thread 2: Priority 707
Thread 3: Priority 707
Thread 4: Priority 707
Thread 1: Priority 707
Thread 0: Priority 707
Thread 2: Priority 706
Thread 3: Priority 706
Thread 4: Priority 706
Thread 1: Priority 706
Thread 0: Priority 706
Thread 2: Priority 705
Thread 3: Priority 705
Thread 4: Priority 705
Thread 1: Priority 705
Thread 0: Priority 705
Thread 2: Priority 704
Thread 3: Priority 704
Thread 4: Priority 704
Thread 1: Priority 704
Thread 0: Priority 704
Thread 3: Priority 703
Thread 2: Priority 703
Thread 4: Priority 703
Thread 1: Priority 703
Thread 0: Priority 703
Thread 2: Priority 702
Thread 3: Priority 702
Thread 4: Priority 702
Thread 1: Priority 702
Thread 0: Priority 702
Thread 2: Priority 701
Thread 3: Priority 701
Thread 4: Priority 701
Thread 1: Priority 701
Thread 0: Priority 701
Thread 2: Priority 700
Thread 3: Priority 700
Thread 4: Priority 700
Thread 1: Priority 700
Thread 0: Priority 700
Thread 2: Priority 699
Thread 3: Priority 699
Thread 4: Priority 699
Thread 1: Priority 699
Thread 0: Priority 699
Thread 2: Priority 698
Thread 3: Priority 698
Thread 4: Priority 698
Thread 1: Priority 698
Thread 0: Priority 698
Thread 2: Priority 697
Thread 3: Priority 697
Thread 4: Priority 697
Thread 1: Priority 697
Thread 0: Priority 697
Thread 2: Priority 696
Thread 3: Priority 696
Thread 4: Priority 696
Thread 1: Priority 696
Thread 0: Priority 696
Thread 2: Priority 695
Thread 4: Priority 695
Thread 3: Priority 695
Thread 1: Priority 695
Thread 0: Priority 695
Thread 2: Priority 694
Thread 3: Priority 694
Thread 4: Priority 694
Thread 1: Priority 694
Thread 0: Priority 694
Thread 2: Priority 693
Thread 3: Priority 693
Thread 4: Priority 693
Thread 1: Priority 693
Thread 0: Priority 693
Thread 2: Priority 692
Thread 3: Priority 692
Thread 4: Priority 692
Thread 1: Priority 692
Thread 0: Priority 692
Thread 3: Priority 691
Thread 2: Priority 691
Thread 4: Priority 691
Thread 1: Priority 691
Thread 0: Priority 691
Thread 3: Priority 690
Thread 4: Priority 690
Thread 2: Priority 690
Thread 1: Priority 690
Thread 0: Priority 690
Thread 2: Priority 689
Thread 3: Priority 689
Thread 4: Priority 689
Thread 1: Priority 689
Thread 0: Priority 689
Thread 2: Priority 688
Thread 3: Priority 688
Thread 4: Priority 688
Thread 1: Priority 688
Thread 0: Priority 688
Thread 2: Priority 687
Thread 3: Priority 687
Thread 4: Priority 687
Thread 1: Priority 687
Thread 0: Priority 687
Thread 4: Priority 686
Thread 3: Priority 686
Thread 1: Priority 686
Thread 2: Priority 686
Thread 0: Priority 686
Thread 2: Priority 685
Thread 3: Priority 685
Thread 4: Priority 685
Thread 1: Priority 685
Thread 0: Priority 685
Thread 2: Priority 684
Thread 3: Priority 684
Thread 4: Priority 684
Thread 1: Priority 684
Thread 0: Priority 684
Thread 3: Priority 683
Thread 4: Priority 683
Thread 2: Priority 683
Thread 1: Priority 683
Thread 0: Priority 683
Thread 3: Priority 682
Thread 2: Priority 682
Thread 4: Priority 682
Thread 1: Priority 682
Thread 0: Priority 682
Thread 2: Priority 681
Thread 3: Priority 681
Thread 4: Priority 681
Thread 1: Priority 681
Thread 0: Priority 681
Thread 2: Priority 680
Thread 3: Priority 680
Thread 4: Priority 680
Thread 1: Priority 680
Thread 0: Priority 680
Thread 2: Priority 679
Thread 3: Priority 679
Thread 4: Priority 679
Thread 1: Priority 679
Thread 0: Priority 679
Thread 2: Priority 678
Thread 3: Priority 678
Thread 4: Priority 678
Thread 1: Priority 678
Thread 0: Priority 678
Thread 2: Priority 677
Thread 3: Priority 677
Thread 4: Priority 677
Thread 1: Priority 677
Thread 0: Priority 677
Thread 2: Priority 676
Thread 3: Priority 676
Thread 4: Priority 676
Thread 1: Priority 676
Thread 0: Priority 676
Thread 2: Priority 675
Thread 3: Priority 675
Thread 4: Priority 675
Thread 1: Priority 675
Thread 0: Priority 675
Thread 2: Priority 674
Thread 3: Priority 674
Thread 4: Priority 674
Thread 1: Priority 674
Thread 0: Priority 674
Thread 2: Priority 673
Thread 3: Priority 673
Thread 4: Priority 673
Thread 1: Priority 673
Thread 0: Priority 673
Thread 2: Priority 672
Thread 3: Priority 672
Thread 4: Priority 672
Thread 1: Priority 672
Thread 0: Priority 672
Thread 2: Priority 671
Thread 3: Priority 671
Thread 4: Priority 671
Thread 1: Priority 671
Thread 0: Priority 671
Thread 2: Priority 670
Thread 3: Priority 670
Thread 4: Priority 670
Thread 1: Priority 670
Thread 0: Priority 670
Thread 2: Priority 669
Thread 3: Priority 669
Thread 4: Priority 669
Thread 1: Priority 669
Thread 0: Priority 669
Thread 2: Priority 668
Thread 3: Priority 668
Thread 4: Priority 668
Thread 1: Priority 668
Thread 0: Priority 668
Thread 2: Priority 667
Thread 3: Priority 667
Thread 4: Priority 667
Thread 1: Priority 667
Thread 0: Priority 667
Thread 3: Priority 666
Thread 4: Priority 666
Thread 1: Priority 666
Thread 0: Priority 666
Thread 2: Priority 666
Thread 2: Priority 665
Thread 3: Priority 665
Thread 4: Priority 665
Thread 1: Priority 665
Thread 0: Priority 665
Thread 2: Priority 664
Thread 4: Priority 664
Thread 1: Priority 664
Thread 3: Priority 664
Thread 0: Priority 664
Thread 2: Priority 663
Thread 3: Priority 663
Thread 4: Priority 663
Thread 1: Priority 663
Thread 0: Priority 663
Thread 2: Priority 662
Thread 3: Priority 662
Thread 4: Priority 662
Thread 1: Priority 662
Thread 0: Priority 662
Thread 2: Priority 661
Thread 3: Priority 661
Thread 4: Priority 661
Thread 1: Priority 661
Thread 0: Priority 661
Thread 2: Priority 660
Thread 3: Priority 660
Thread 4: Priority 660
Thread 1: Priority 660
Thread 0: Priority 660
Thread 2: Priority 659
Thread 3: Priority 659
Thread 4: Priority 659
Thread 1: Priority 659
Thread 0: Priority 659
Thread 2: Priority 658
Thread 3: Priority 658
Thread 4: Priority 658
Thread 1: Priority 658
Thread 0: Priority 658
Thread 2: Priority 657
Thread 3: Priority 657
Thread 4: Priority 657
Thread 1: Priority 657
Thread 0: Priority 657
Thread 2: Priority 656
Thread 3: Priority 656
Thread 4: Priority 656
Thread 1: Priority 656
Thread 0: Priority 656
Thread 2: Priority 655
Thread 3: Priority 655
Thread 4: Priority 655
Thread 1: Priority 655
Thread 0: Priority 655
Thread 2: Priority 654
Thread 3: Priority 654
Thread 4: Priority 654
Thread 1: Priority 654
Thread 0: Priority 654
Thread 2: Priority 653
Thread 3: Priority 653
Thread 4: Priority 653
Thread 1: Priority 653
Thread 0: Priority 653
Thread 2: Priority 652
Thread 4: Priority 652
Thread 1: Priority 652
Thread 3: Priority 652
Thread 0: Priority 652
Thread 2: Priority 651
Thread 3: Priority 651
Thread 4: Priority 651
Thread 1: Priority 651
Thread 0: Priority 651
Thread 2: Priority 650
Thread 3: Priority 650
Thread 4: Priority 650
Thread 1: Priority 650
Thread 0: Priority 650
Thread 2: Priority 649
Thread 3: Priority 649
Thread 4: Priority 649
Thread 1: Priority 649
Thread 0: Priority 649
Thread 2: Priority 648
Thread 3: Priority 648
Thread 4: Priority 648
Thread 1: Priority 648
Thread 0: Priority 648
Thread 2: Priority 647
Thread 3: Priority 647
Thread 4: Priority 647
Thread 1: Priority 647
Thread 0: Priority 647
Thread 2: Priority 646
Thread 3: Priority 646
Thread 4: Priority 646
Thread 1: Priority 646
Thread 0: Priority 646
Thread 2: Priority 645
Thread 3: Priority 645
Thread 4: Priority 645
Thread 1: Priority 645
Thread 0: Priority 645
Thread 2: Priority 644
Thread 3: Priority 644
Thread 4: Priority 644
Thread 1: Priority 644
Thread 0: Priority 644
Thread 2: Priority 643
Thread 3: Priority 643
Thread 4: Priority 643
Thread 1: Priority 643
Thread 0: Priority 643
Thread 3: Priority 642
Thread 4: Priority 642
Thread 0: Priority 642
Thread 1: Priority 642
Thread 2: Priority 642
Thread 4: Priority 641
Thread 1: Priority 641
Thread 0: Priority 641
Thread 3: Priority 641
Thread 2: Priority 641
Thread 3: Priority 640
Thread 4: Priority 640
Thread 1: Priority 640
Thread 0: Priority 640
Thread 2: Priority 640
Thread 3: Priority 639
Thread 4: Priority 639
Thread 1: Priority 639
Thread 0: Priority 639
Thread 2: Priority 639
Thread 4: Priority 638
Thread 3: Priority 638
Thread 1: Priority 638
Thread 0: Priority 638
Thread 2: Priority 638
Thread 3: Priority 637
Thread 4: Priority 637
Thread 1: Priority 637
Thread 0: Priority 637
Thread 2: Priority 637
Thread 3: Priority 636
Thread 4: Priority 636
Thread 1: Priority 636
Thread 0: Priority 636
Thread 2: Priority 636
Thread 3: Priority 635
Thread 4: Priority 635
Thread 1: Priority 635
Thread 0: Priority 635
Thread 2: Priority 635
Thread 3: Priority 634
Thread 4: Priority 634
Thread 1: Priority 634
Thread 0: Priority 634
Thread 2: Priority 634
Thread 4: Priority 633
Thread 3: Priority 633
Thread 1: Priority 633
Thread 0: Priority 633
Thread 2: Priority 633
Thread 3: Priority 632
Thread 4: Priority 632
Thread 1: Priority 632
Thread 0: Priority 632
Thread 2: Priority 632
Thread 3: Priority 631
Thread 4: Priority 631
Thread 1: Priority 631
Thread 0: Priority 631
Thread 2: Priority 631
Thread 3: Priority 630
Thread 4: Priority 630
Thread 1: Priority 630
Thread 0: Priority 630
Thread 2: Priority 630
Thread 3: Priority 629
Thread 4: Priority 629
Thread 1: Priority 629
Thread 0: Priority 629
Thread 2: Priority 629
Thread 3: Priority 628
Thread 4: Priority 628
Thread 1: Priority 628
Thread 0: Priority 628
Thread 2: Priority 628
Thread 3: Priority 627
Thread 4: Priority 627
Thread 1: Priority 627
Thread 0: Priority 627
Thread 2: Priority 627
Thread 3: Priority 626
Thread 4: Priority 626
Thread 1: Priority 626
Thread 0: Priority 626
Thread 2: Priority 626
Thread 3: Priority 625
Thread 4: Priority 625
Thread 1: Priority 625
Thread 0: Priority 625
Thread 2: Priority 625
Thread 4: Priority 624
Thread 1: Priority 624
Thread 3: Priority 624
Thread 0: Priority 624
Thread 2: Priority 624
Thread 3: Priority 623
Thread 4: Priority 623
Thread 1: Priority 623
Thread 0: Priority 623
Thread 2: Priority 623
Thread 3: Priority 622
Thread 1: Priority 622
Thread 4: Priority 622
Thread 0: Priority 622
Thread 2: Priority 622
Thread 3: Priority 621
Thread 4: Priority 621
Thread 1: Priority 621
Thread 0: Priority 621
Thread 2: Priority 621
Thread 4: Priority 620
Thread 1: Priority 620
Thread 3: Priority 620
Thread 0: Priority 620
Thread 2: Priority 620
Thread 3: Priority 619
Thread 4: Priority 619
Thread 1: Priority 619
Thread 0: Priority 619
Thread 2: Priority 619
Thread 3: Priority 618
Thread 4: Priority 618
Thread 1: Priority 618
Thread 0: Priority 618
Thread 2: Priority 618
Thread 3: Priority 617
Thread 4: Priority 617
Thread 1: Priority 617
Thread 0: Priority 617
Thread 2: Priority 617
Thread 3: Priority 616
Thread 4: Priority 616
Thread 1: Priority 616
Thread 0: Priority 616
Thread 2: Priority 616
Thread 3: Priority 615
Thread 4: Priority 615
Thread 1: Priority 615
Thread 0: Priority 615
Thread 2: Priority 615
Thread 3: Priority 614
Thread 4: Priority 614
Thread 2: Priority 614
Thread 0: Priority 614
Thread 1: Priority 614
Thread 4: Priority 613
Thread 1: Priority 613
Thread 3: Priority 613
Thread 0: Priority 613
Thread 2: Priority 613
Thread 3: Priority 612
Thread 4: Priority 612
Thread 1: Priority 612
Thread 0: Priority 612
Thread 2: Priority 612
Thread 3: Priority 611
Thread 4: Priority 611
Thread 1: Priority 611
Thread 0: Priority 611
Thread 2: Priority 611
Thread 3: Priority 610
Thread 4: Priority 610
Thread 1: Priority 610
Thread 0: Priority 610
Thread 2: Priority 610
Thread 3: Priority 609
Thread 4: Priority 609
Thread 1: Priority 609
Thread 0: Priority 609
Thread 2: Priority 609
Thread 3: Priority 608
Thread 4: Priority 608
Thread 1: Priority 608
Thread 0: Priority 608
Thread 2: Priority 608
Thread 3: Priority 607
Thread 4: Priority 607
Thread 1: Priority 607
Thread 0: Priority 607
Thread 2: Priority 607
Thread 3: Priority 606
Thread 1: Priority 606
Thread 4: Priority 606
Thread 0: Priority 606
Thread 2: Priority 606
Thread 3: Priority 605
Thread 4: Priority 605
Thread 1: Priority 605
Thread 2: Priority 605
Thread 0: Priority 605
Thread 3: Priority 604
Thread 4: Priority 604
Thread 1: Priority 604
Thread 0: Priority 604
Thread 2: Priority 604
Thread 3: Priority 603
Thread 4: Priority 603
Thread 1: Priority 603
Thread 0: Priority 603
Thread 2: Priority 603
Thread 3: Priority 602
Thread 4: Priority 602
Thread 1: Priority 602
Thread 0: Priority 602
Thread 2: Priority 602
Thread 3: Priority 601
Thread 4: Priority 601
Thread 1: Priority 601
Thread 0: Priority 601
Thread 2: Priority 601
Thread 3: Priority 600
Thread 4: Priority 600
Thread 1: Priority 600
Thread 0: Priority 600
Thread 2: Priority 600
Thread 3: Priority 599
Thread 4: Priority 599
Thread 1: Priority 599
Thread 0: Priority 599
Thread 2: Priority 599
Thread 3: Priority 598
Thread 4: Priority 598
Thread 0: Priority 598
Thread 1: Priority 598
Thread 2: Priority 598
Thread 4: Priority 597
Thread 3: Priority 597
Thread 1: Priority 597
Thread 0: Priority 597
Thread 2: Priority 597
Thread 3: Priority 596
Thread 4: Priority 596
Thread 1: Priority 596
Thread 0: Priority 596
Thread 2: Priority 596
Thread 3: Priority 595
Thread 4: Priority 595
Thread 1: Priority 595
Thread 0: Priority 595
Thread 2: Priority 595
Thread 3: Priority 594
Thread 4: Priority 594
Thread 0: Priority 594
Thread 2: Priority 594
Thread 1: Priority 594
Thread 3: Priority 593
Thread 4: Priority 593
Thread 1: Priority 593
Thread 0: Priority 593
Thread 2: Priority 593
Thread 4: Priority 592
Thread 1: Priority 592
Thread 3: Priority 592
Thread 0: Priority 592
Thread 2: Priority 592
Thread 3: Priority 591
Thread 4: Priority 591
Thread 1: Priority 591
Thread 2: Priority 591
Thread 0: Priority 591
Thread 3: Priority 590
Thread 4: Priority 590
Thread 1: Priority 590
Thread 0: Priority 590
Thread 2: Priority 590
Thread 3: Priority 589
Thread 4: Priority 589
Thread 1: Priority 589
Thread 0: Priority 589
Thread 2: Priority 589
Thread 4: Priority 588
Thread 1: Priority 588
Thread 0: Priority 588
Thread 2: Priority 588
Thread 3: Priority 588
Thread 3: Priority 587
Thread 4: Priority 587
Thread 1: Priority 587
Thread 0: Priority 587
Thread 2: Priority 587
Thread 3: Priority 586
Thread 4: Priority 586
Thread 1: Priority 586
Thread 0: Priority 586
Thread 2: Priority 586
Thread 3: Priority 585
Thread 4: Priority 585
Thread 1: Priority 585
Thread 0: Priority 585
Thread 2: Priority 585
Thread 3: Priority 584
Thread 4: Priority 584
Thread 1: Priority 584
Thread 0: Priority 584
Thread 2: Priority 584
Thread 3: Priority 583
Thread 4: Priority 583
Thread 1: Priority 583
Thread 0: Priority 583
Thread 2: Priority 583
Thread 3: Priority 582
Thread 1: Priority 582
Thread 4: Priority 582
Thread 0: Priority 582
Thread 2: Priority 582
Thread 4: Priority 581
Thread 1: Priority 581
Thread 0: Priority 581
Thread 2: Priority 581
Thread 3: Priority 581
Thread 3: Priority 580
Thread 4: Priority 580
Thread 1: Priority 580
Thread 0: Priority 580
Thread 2: Priority 580
Thread 3: Priority 579
Thread 4: Priority 579
Thread 2: Priority 579
Thread 1: Priority 579
Thread 0: Priority 579
Thread 3: Priority 578
Thread 4: Priority 578
Thread 0: Priority 578
Thread 1: Priority 578
Thread 2: Priority 578
Thread 3: Priority 577
Thread 4: Priority 577
Thread 1: Priority 577
Thread 0: Priority 577
Thread 2: Priority 577
Thread 3: Priority 576
Thread 4: Priority 576
Thread 1: Priority 576
Thread 0: Priority 576
Thread 2: Priority 576
Thread 4: Priority 575
Thread 3: Priority 575
Thread 1: Priority 575
Thread 0: Priority 575
Thread 2: Priority 575
Thread 3: Priority 574
Thread 4: Priority 574
Thread 0: Priority 574
Thread 2: Priority 574
Thread 1: Priority 574
Thread 4: Priority 573
Thread 1: Priority 573
Thread 3: Priority 573
Thread 0: Priority 573
Thread 2: Priority 573
Thread 3: Priority 572
Thread 2: Priority 572
Thread 4: Priority 572
Thread 1: Priority 572
Thread 0: Priority 572
Thread 3: Priority 571
Thread 4: Priority 571
Thread 1: Priority 571
Thread 0: Priority 571
Thread 2: Priority 571
Thread 3: Priority 570
Thread 4: Priority 570
Thread 1: Priority 570
Thread 0: Priority 570
Thread 2: Priority 570
Thread 3: Priority 569
Thread 4: Priority 569
Thread 1: Priority 569
Thread 0: Priority 569
Thread 2: Priority 569
Thread 4: Priority 568
Thread 3: Priority 568
Thread 1: Priority 568
Thread 0: Priority 568
Thread 2: Priority 568
Thread 3: Priority 567
Thread 4: Priority 567
Thread 1: Priority 567
Thread 0: Priority 567
Thread 2: Priority 567
Thread 4: Priority 566
Thread 1: Priority 566
Thread 0: Priority 566
Thread 2: Priority 566
Thread 3: Priority 566
Thread 3: Priority 565
Thread 4: Priority 565
Thread 1: Priority 565
Thread 0: Priority 565
Thread 2: Priority 565
Thread 3: Priority 564
Thread 4: Priority 564
Thread 1: Priority 564
Thread 0: Priority 564
Thread 2: Priority 564
Thread 4: Priority 563
Thread 3: Priority 563
Thread 1: Priority 563
Thread 0: Priority 563
Thread 2: Priority 563
Thread 3: Priority 562
Thread 1: Priority 562
Thread 0: Priority 562
Thread 4: Priority 562
Thread 2: Priority 562
Thread 3: Priority 561
Thread 4: Priority 561
Thread 1: Priority 561
Thread 0: Priority 561
Thread 2: Priority 561
Thread 3: Priority 560
Thread 4: Priority 560
Thread 1: Priority 560
Thread 0: Priority 560
Thread 2: Priority 560
Thread 3: Priority 559
Thread 4: Priority 559
Thread 1: Priority 559
Thread 0: Priority 559
Thread 2: Priority 559
Thread 3: Priority 558
Thread 4: Priority 558
Thread 0: Priority 558
Thread 1: Priority 558
Thread 2: Priority 558
Thread 3: Priority 557
Thread 4: Priority 557
Thread 1: Priority 557
Thread 0: Priority 557
Thread 2: Priority 557
Thread 3: Priority 556
Thread 4: Priority 556
Thread 1: Priority 556
Thread 0: Priority 556
Thread 2: Priority 556
Thread 3: Priority 555
Thread 4: Priority 555
Thread 2: Priority 555
Thread 1: Priority 555
Thread 0: Priority 555
Thread 4: Priority 554
Thread 1: Priority 554
Thread 3: Priority 554
Thread 0: Priority 554
Thread 2: Priority 554
Thread 3: Priority 553
Thread 1: Priority 553
Thread 0: Priority 553
Thread 4: Priority 553
Thread 2: Priority 553
Thread 3: Priority 552
Thread 4: Priority 552
Thread 1: Priority 552
Thread 0: Priority 552
Thread 2: Priority 552
Thread 3: Priority 551
Thread 1: Priority 551
Thread 0: Priority 551
Thread 4: Priority 551
Thread 2: Priority 551
Thread 3: Priority 550
Thread 4: Priority 550
Thread 0: Priority 550
Thread 1: Priority 550
Thread 2: Priority 550
Thread 3: Priority 549
Thread 4: Priority 549
Thread 1: Priority 549
Thread 0: Priority 549
Thread 2: Priority 549
Thread 3: Priority 548
Thread 4: Priority 548
Thread 1: Priority 548
Thread 0: Priority 548
Thread 2: Priority 548
Thread 3: Priority 547
Thread 4: Priority 547
Thread 1: Priority 547
Thread 0: Priority 547
Thread 2: Priority 547
Thread 3: Priority 546
Thread 1: Priority 546
Thread 4: Priority 546
Thread 0: Priority 546
Thread 2: Priority 546
Thread 3: Priority 545
Thread 4: Priority 545
Thread 1: Priority 545
Thread 0: Priority 545
Thread 2: Priority 545
Thread 3: Priority 544
Thread 4: Priority 544
Thread 1: Priority 544
Thread 0: Priority 544
Thread 2: Priority 544
Thread 4: Priority 543
Thread 3: Priority 543
Thread 1: Priority 543
Thread 0: Priority 543
Thread 2: Priority 543
Thread 3: Priority 542
Thread 1: Priority 542
Thread 4: Priority 542
Thread 0: Priority 542
Thread 2: Priority 542
Thread 3: Priority 541
Thread 4: Priority 541
Thread 1: Priority 541
Thread 0: Priority 541
Thread 2: Priority 541
Thread 3: Priority 540
Thread 2: Priority 540
Thread 4: Priority 540
Thread 1: Priority 540
Thread 0: Priority 540
Thread 3: Priority 539
Thread 4: Priority 539
Thread 1: Priority 539
Thread 0: Priority 539
Thread 2: Priority 539
Thread 3: Priority 538
Thread 4: Priority 538
Thread 1: Priority 538
Thread 0: Priority 538
Thread 2: Priority 538
Thread 3: Priority 537
Thread 4: Priority 537
Thread 1: Priority 537
Thread 0: Priority 537
Thread 2: Priority 537
Thread 4: Priority 536
Thread 3: Priority 536
Thread 1: Priority 536
Thread 0: Priority 536
Thread 2: Priority 536
Thread 3: Priority 535
Thread 1: Priority 535
Thread 0: Priority 535
Thread 4: Priority 535
Thread 2: Priority 535
Thread 3: Priority 534
Thread 4: Priority 534
Thread 0: Priority 534
Thread 2: Priority 534
Thread 1: Priority 534
Thread 3: Priority 533
Thread 4: Priority 533
Thread 1: Priority 533
Thread 0: Priority 533
Thread 2: Priority 533
Thread 3: Priority 532
Thread 4: Priority 532
Thread 1: Priority 532
Thread 0: Priority 532
Thread 2: Priority 532
Thread 1: Priority 531
Thread 3: Priority 531
Thread 0: Priority 531
Thread 4: Priority 531
Thread 2: Priority 531
Thread 3: Priority 530
Thread 4: Priority 530
Thread 1: Priority 530
Thread 0: Priority 530
Thread 2: Priority 530
Thread 3: Priority 529
Thread 4: Priority 529
Thread 1: Priority 529
Thread 0: Priority 529
Thread 2: Priority 529
Thread 3: Priority 528
Thread 4: Priority 528
Thread 1: Priority 528
Thread 0: Priority 528
Thread 2: Priority 528
Thread 4: Priority 527
Thread 1: Priority 527
Thread 0: Priority 527
Thread 2: Priority 527
Thread 3: Priority 527
Thread 3: Priority 526
Thread 1: Priority 526
Thread 0: Priority 526
Thread 2: Priority 526
Thread 4: Priority 526
Thread 3: Priority 525
Thread 4: Priority 525
Thread 1: Priority 525
Thread 0: Priority 525
Thread 2: Priority 525
Thread 3: Priority 524
Thread 4: Priority 524
Thread 1: Priority 524
Thread 2: Priority 524
Thread 0: Priority 524
Thread 3: Priority 523
Thread 4: Priority 523
Thread 1: Priority 523
Thread 0: Priority 523
Thread 2: Priority 523
Thread 3: Priority 522
Thread 4: Priority 522
Thread 2: Priority 522
Thread 1: Priority 522
Thread 0: Priority 522
Thread 4: Priority 521
Thread 1: Priority 521
Thread 0: Priority 521
Thread 3: Priority 521
Thread 2: Priority 521
Thread 3: Priority 520
Thread 4: Priority 520
Thread 1: Priority 520
Thread 0: Priority 520
Thread 2: Priority 520
Thread 3: Priority 519
Thread 1: Priority 519
Thread 4: Priority 519
Thread 0: Priority 519
Thread 2: Priority 519
Thread 3: Priority 518
Thread 4: Priority 518
Thread 0: Priority 518
Thread 1: Priority 518
Thread 2: Priority 518
Thread 3: Priority 517
Thread 2: Priority 517
Thread 4: Priority 517
Thread 1: Priority 517
Thread 0: Priority 517
Thread 3: Priority 516
Thread 4: Priority 516
Thread 1: Priority 516
Thread 0: Priority 516
Thread 2: Priority 516
Thread 3: Priority 515
Thread 4: Priority 515
Thread 1: Priority 515
Thread 0: Priority 515
Thread 2: Priority 515
Thread 3: Priority 514
Thread 4: Priority 514
Thread 0: Priority 514
Thread 2: Priority 514
Thread 1: Priority 514
Thread 3: Priority 513
Thread 2: Priority 513
Thread 0: Priority 513
Thread 1: Priority 513
Thread 4: Priority 513
Thread 3: Priority 512
Thread 4: Priority 512
Thread 1: Priority 512
Thread 0: Priority 512
Thread 2: Priority 512
Thread 3: Priority 511
Thread 2: Priority 511
Thread 0: Priority 511
Thread 1: Priority 511
Thread 4: Priority 511
Thread 3: Priority 510
Thread 4: Priority 510
Thread 2: Priority 510
Thread 1: Priority 510
Thread 0: Priority 510
Thread 4: Priority 509
Thread 3: Priority 509
Thread 1: Priority 509
Thread 0: Priority 509
Thread 2: Priority 509
Thread 3: Priority 508
Thread 4: Priority 508
Thread 1: Priority 508
Thread 0: Priority 508
Thread 2: Priority 508
Thread 3: Priority 507
Thread 2: Priority 507
Thread 4: Priority 507
Thread 1: Priority 507
Thread 0: Priority 507
Thread 3: Priority 506
Thread 4: Priority 506
Thread 1: Priority 506
Thread 0: Priority 506
Thread 2: Priority 506
Thread 3: Priority 505
Thread 4: Priority 505
Thread 1: Priority 505
Thread 0: Priority 505
Thread 2: Priority 505
Thread 4: Priority 504
Thread 3: Priority 504
Thread 1: Priority 504
Thread 0: Priority 504
Thread 2: Priority 504
Thread 3: Priority 503
Thread 4: Priority 503
Thread 1: Priority 503
Thread 0: Priority 503
Thread 2: Priority 503
Thread 3: Priority 502
Thread 4: Priority 502
Thread 2: Priority 502
Thread 1: Priority 502
Thread 0: Priority 502
Thread 3: Priority 501
Thread 4: Priority 501
Thread 1: Priority 501
Thread 0: Priority 501
Thread 2: Priority 501
Thread 3: Priority 500
Thread 4: Priority 500
Thread 2: Priority 500
Thread 1: Priority 500
Thread 0: Priority 500
Thread 3: Priority 499
Thread 4: Priority 499
Thread 0: Priority 499
Thread 1: Priority 499
Thread 2: Priority 499
Thread 3: Priority 498
Thread 4: Priority 498
Thread 1: Priority 498
Thread 0: Priority 498
Thread 2: Priority 498
Thread 3: Priority 497
Thread 4: Priority 497
Thread 1: Priority 497
Thread 0: Priority 497
Thread 2: Priority 497
Thread 3: Priority 496
Thread 4: Priority 496
Thread 1: Priority 496
Thread 0: Priority 496
Thread 2: Priority 496
Thread 4: Priority 495
Thread 3: Priority 495
Thread 0: Priority 495
Thread 2: Priority 495
Thread 1: Priority 495
Thread 3: Priority 494
Thread 4: Priority 494
Thread 1: Priority 494
Thread 0: Priority 494
Thread 2: Priority 494
Thread 3: Priority 493
Thread 4: Priority 493
Thread 1: Priority 493
Thread 0: Priority 493
Thread 2: Priority 493
Thread 3: Priority 492
Thread 4: Priority 492
Thread 1: Priority 492
Thread 0: Priority 492
Thread 2: Priority 492
Thread 3: Priority 491
Thread 2: Priority 491
Thread 1: Priority 491
Thread 0: Priority 491
Thread 4: Priority 491
Thread 3: Priority 490
Thread 4: Priority 490
Thread 1: Priority 490
Thread 0: Priority 490
Thread 2: Priority 490
Thread 2: Priority 489
Thread 4: Priority 489
Thread 1: Priority 489
Thread 0: Priority 489
Thread 3: Priority 489
Thread 3: Priority 488
Thread 4: Priority 488
Thread 1: Priority 488
Thread 0: Priority 488
Thread 2: Priority 488
Thread 3: Priority 487
Thread 1: Priority 487
Thread 4: Priority 487
Thread 0: Priority 487
Thread 2: Priority 487
Thread 3: Priority 486
Thread 4: Priority 486
Thread 1: Priority 486
Thread 0: Priority 486
Thread 2: Priority 486
Thread 3: Priority 485
Thread 4: Priority 485
Thread 1: Priority 485
Thread 0: Priority 485
Thread 2: Priority 485
Thread 4: Priority 484
Thread 1: Priority 484
Thread 0: Priority 484
Thread 3: Priority 484
Thread 2: Priority 484
Thread 2: Priority 483
Thread 3: Priority 483
Thread 1: Priority 483
Thread 4: Priority 483
Thread 0: Priority 483
Thread 1: Priority 482
Thread 0: Priority 482
Thread 4: Priority 482
Thread 2: Priority 482
Thread 3: Priority 482
Thread 3: Priority 481
Thread 4: Priority 481
Thread 1: Priority 481
Thread 0: Priority 481
Thread 2: Priority 481
Thread 4: Priority 480
Thread 1: Priority 480
Thread 0: Priority 480
Thread 3: Priority 480
Thread 2: Priority 480
Thread 3: Priority 479
Thread 2: Priority 479
Thread 4: Priority 479
Thread 0: Priority 479
Thread 1: Priority 479
Thread 3: Priority 478
Thread 4: Priority 478
Thread 1: Priority 478
Thread 0: Priority 478
Thread 2: Priority 478
Thread 3: Priority 477
Thread 4: Priority 477
Thread 1: Priority 477
Thread 0: Priority 477
Thread 2: Priority 477
Thread 4: Priority 476
Thread 1: Priority 476
Thread 0: Priority 476
Thread 2: Priority 476
Thread 3: Priority 476
Thread 3: Priority 475
Thread 2: Priority 475
Thread 4: Priority 475
Thread 1: Priority 475
Thread 0: Priority 475
Thread 3: Priority 474
Thread 4: Priority 474
Thread 1: Priority 474
Thread 0: Priority 474
Thread 2: Priority 474
Thread 3: Priority 473
Thread 1: Priority 473
Thread 0: Priority 473
Thread 2: Priority 473
Thread 4: Priority 473
Thread 3: Priority 472
Thread 2: Priority 472
Thread 4: Priority 472
Thread 1: Priority 472
Thread 0: Priority 472
Thread 3: Priority 471
Thread 0: Priority 471
Thread 1: Priority 471
Thread 4: Priority 471
Thread 2: Priority 471
Thread 4: Priority 470
Thread 2: Priority 470
Thread 3: Priority 470
Thread 1: Priority 470
Thread 0: Priority 470
Thread 3: Priority 469
Thread 1: Priority 469
Thread 0: Priority 469
Thread 4: Priority 469
Thread 2: Priority 469
Thread 3: Priority 468
Thread 4: Priority 468
Thread 1: Priority 468
Thread 0: Priority 468
Thread 2: Priority 468
Thread 3: Priority 467
Thread 1: Priority 467
Thread 4: Priority 467
Thread 0: Priority 467
Thread 2: Priority 467
Thread 4: Priority 466
Thread 2: Priority 466
Thread 3: Priority 466
Thread 1: Priority 466
Thread 0: Priority 466
Thread 3: Priority 465
Thread 1: Priority 465
Thread 0: Priority 465
Thread 2: Priority 465
Thread 4: Priority 465
Thread 3: Priority 464
Thread 4: Priority 464
Thread 1: Priority 464
Thread 0: Priority 464
Thread 2: Priority 464
Thread 3: Priority 463
Thread 1: Priority 463
Thread 4: Priority 463
Thread 0: Priority 463
Thread 2: Priority 463
Thread 4: Priority 462
Thread 2: Priority 462
Thread 1: Priority 462
Thread 0: Priority 462
Thread 3: Priority 462
Thread 3: Priority 461
Thread 1: Priority 461
Thread 0: Priority 461
Thread 4: Priority 461
Thread 2: Priority 461
Thread 4: Priority 460
Thread 1: Priority 460
Thread 0: Priority 460
Thread 3: Priority 460
Thread 2: Priority 460
Thread 3: Priority 459
Thread 4: Priority 459
Thread 1: Priority 459
Thread 0: Priority 459
Thread 2: Priority 459
Thread 3: Priority 458
Thread 2: Priority 458
Thread 4: Priority 458
Thread 1: Priority 458
Thread 0: Priority 458
Thread 3: Priority 457
Thread 2: Priority 457
Thread 4: Priority 457
Thread 1: Priority 457
Thread 0: Priority 457
Thread 4: Priority 456
Thread 2: Priority 456
Thread 1: Priority 456
Thread 0: Priority 456
Thread 3: Priority 456
Thread 3: Priority 455
Thread 4: Priority 455
Thread 0: Priority 455
Thread 2: Priority 455
Thread 1: Priority 455
Thread 3: Priority 454
Thread 4: Priority 454
Thread 2: Priority 454
Thread 1: Priority 454
Thread 0: Priority 454
Thread 3: Priority 453
Thread 4: Priority 453
Thread 1: Priority 453
Thread 0: Priority 453
Thread 2: Priority 453
Thread 4: Priority 452
Thread 3: Priority 452
Thread 1: Priority 452
Thread 0: Priority 452
Thread 2: Priority 452
Thread 4: Priority 451
Thread 1: Priority 451
Thread 0: Priority 451
Thread 2: Priority 451
Thread 3: Priority 451
Thread 2: Priority 450
Thread 1: Priority 450
Thread 4: Priority 450
Thread 0: Priority 450
Thread 3: Priority 450
Thread 4: Priority 449
Thread 1: Priority 449
Thread 0: Priority 449
Thread 2: Priority 449
Thread 3: Priority 449
Thread 2: Priority 448
Thread 4: Priority 448
Thread 1: Priority 448
Thread 0: Priority 448
Thread 3: Priority 448
Thread 3: Priority 447
Thread 1: Priority 447
Thread 4: Priority 447
Thread 0: Priority 447
Thread 2: Priority 447
Thread 4: Priority 446
Thread 2: Priority 446
Thread 1: Priority 446
Thread 0: Priority 446
Thread 3: Priority 446
Thread 1: Priority 445
Thread 0: Priority 445
Thread 2: Priority 445
Thread 4: Priority 445
Thread 3: Priority 445
Thread 4: Priority 444
Thread 1: Priority 444
Thread 0: Priority 444
Thread 2: Priority 444
Thread 3: Priority 444
Thread 2: Priority 443
Thread 4: Priority 443
Thread 3: Priority 443
Thread 1: Priority 443
Thread 0: Priority 443
Thread 4: Priority 442
Thread 1: Priority 442
Thread 2: Priority 442
Thread 0: Priority 442
Thread 3: Priority 442
Thread 4: Priority 441
Thread 2: Priority 441
Thread 1: Priority 441
Thread 0: Priority 441
Thread 3: Priority 441
Thread 2: Priority 440
Thread 4: Priority 440
Thread 1: Priority 440
Thread 0: Priority 440
Thread 3: Priority 440
Thread 4: Priority 439
Thread 0: Priority 439
Thread 1: Priority 439
Thread 2: Priority 439
Thread 3: Priority 439
Thread 0: Priority 438
Thread 4: Priority 438
Thread 1: Priority 438
Thread 2: Priority 438
Thread 3: Priority 438
Thread 4: Priority 437
Thread 0: Priority 437
Thread 1: Priority 437
Thread 2: Priority 437
Thread 3: Priority 437
Thread 2: Priority 436
Thread 4: Priority 436
Thread 1: Priority 436
Thread 0: Priority 436
Thread 3: Priority 436
Thread 0: Priority 435
Thread 4: Priority 435
Thread 3: Priority 435
Thread 2: Priority 435
Thread 1: Priority 435
Thread 2: Priority 434
Thread 4: Priority 434
Thread 1: Priority 434
Thread 0: Priority 434
Thread 3: Priority 434
Thread 4: Priority 433
Thread 1: Priority 433
Thread 0: Priority 433
Thread 2: Priority 433
Thread 3: Priority 433
Thread 4: Priority 432
Thread 1: Priority 432
Thread 0: Priority 432
Thread 2: Priority 432
Thread 3: Priority 432
Thread 4: Priority 431
Thread 1: Priority 431
Thread 2: Priority 431
Thread 0: Priority 431
Thread 3: Priority 431
Thread 4: Priority 430
Thread 2: Priority 430
Thread 1: Priority 430
Thread 0: Priority 430
Thread 3: Priority 430
Thread 4: Priority 429
Thread 0: Priority 429
Thread 1: Priority 429
Thread 2: Priority 429
Thread 3: Priority 429
Thread 4: Priority 428
Thread 1: Priority 428
Thread 0: Priority 428
Thread 2: Priority 428
Thread 3: Priority 428
Thread 4: Priority 427
Thread 0: Priority 427
Thread 1: Priority 427
Thread 3: Priority 427
Thread 2: Priority 427
Thread 0: Priority 426
Thread 4: Priority 426
Thread 1: Priority 426
Thread 2: Priority 426
Thread 3: Priority 426
Thread 0: Priority 425
Thread 2: Priority 425
Thread 4: Priority 425
Thread 1: Priority 425
Thread 3: Priority 425
Thread 4: Priority 424
Thread 1: Priority 424
Thread 0: Priority 424
Thread 2: Priority 424
Thread 3: Priority 424
Thread 4: Priority 423
Thread 1: Priority 423
Thread 0: Priority 423
Thread 2: Priority 423
Thread 3: Priority 423
Thread 2: Priority 422
Thread 4: Priority 422
Thread 1: Priority 422
Thread 3: Priority 422
Thread 0: Priority 422
Thread 1: Priority 421
Thread 4: Priority 421
Thread 0: Priority 421
Thread 2: Priority 421
Thread 3: Priority 421
Thread 4: Priority 420
Thread 2: Priority 420
Thread 1: Priority 420
Thread 0: Priority 420
Thread 3: Priority 420
Thread 4: Priority 419
Thread 0: Priority 419
Thread 1: Priority 419
Thread 2: Priority 419
Thread 3: Priority 419
Thread 3: Priority 418
Thread 0: Priority 418
Thread 4: Priority 418
Thread 1: Priority 418
Thread 2: Priority 418
Thread 2: Priority 417
Thread 0: Priority 417
Thread 1: Priority 417
Thread 4: Priority 417
Thread 3: Priority 417
Thread 4: Priority 416
Thread 2: Priority 416
Thread 1: Priority 416
Thread 0: Priority 416
Thread 3: Priority 416
Thread 4: Priority 415
Thread 0: Priority 415
Thread 2: Priority 415
Thread 3: Priority 415
Thread 1: Priority 415
Thread 2: Priority 414
Thread 4: Priority 414
Thread 1: Priority 414
Thread 0: Priority 414
Thread 3: Priority 414
Thread 4: Priority 413
Thread 1: Priority 413
Thread 2: Priority 413
Thread 3: Priority 413
Thread 0: Priority 413
Thread 4: Priority 412
Thread 3: Priority 412
Thread 1: Priority 412
Thread 0: Priority 412
Thread 2: Priority 412
Thread 4: Priority 411
Thread 1: Priority 411
Thread 2: Priority 411
Thread 3: Priority 411
Thread 0: Priority 411
Thread 4: Priority 410
Thread 0: Priority 410
Thread 1: Priority 410
Thread 2: Priority 410
Thread 3: Priority 410
Thread 4: Priority 409
Thread 1: Priority 409
Thread 0: Priority 409
Thread 2: Priority 409
Thread 3: Priority 409
Thread 3: Priority 408
Thread 4: Priority 408
Thread 1: Priority 408
Thread 0: Priority 408
Thread 2: Priority 408
Thread 1: Priority 407
Thread 4: Priority 407
Thread 0: Priority 407
Thread 2: Priority 407
Thread 3: Priority 407
Thread 4: Priority 406
Thread 2: Priority 406
Thread 0: Priority 406
Thread 1: Priority 406
Thread 3: Priority 406
Thread 3: Priority 405
Thread 1: Priority 405
Thread 0: Priority 405
Thread 2: Priority 405
Thread 4: Priority 405
Thread 2: Priority 404
Thread 4: Priority 404
Thread 1: Priority 404
Thread 0: Priority 404
Thread 3: Priority 404
Thread 4: Priority 403
Thread 1: Priority 403
Thread 0: Priority 403
Thread 2: Priority 403
Thread 3: Priority 403
Thread 3: Priority 402
Thread 1: Priority 402
Thread 2: Priority 402
Thread 4: Priority 402
Thread 0: Priority 402
Thread 4: Priority 401
Thread 1: Priority 401
Thread 2: Priority 401
Thread 3: Priority 401
Thread 0: Priority 401
Thread 4: Priority 400
Thread 3: Priority 400
Thread 1: Priority 400
Thread 0: Priority 400
Thread 2: Priority 400
Thread 4: Priority 399
Thread 2: Priority 399
Thread 0: Priority 399
Thread 1: Priority 399
Thread 3: Priority 399
Thread 4: Priority 398
Thread 1: Priority 398
Thread 0: Priority 398
Thread 2: Priority 398
Thread 3: Priority 398
Thread 0: Priority 397
Thread 4: Priority 397
Thread 1: Priority 397
Thread 2: Priority 397
Thread 3: Priority 397
Thread 4: Priority 396
Thread 1: Priority 396
Thread 0: Priority 396
Thread 2: Priority 396
Thread 3: Priority 396
Thread 0: Priority 395
Thread 4: Priority 395
Thread 2: Priority 395
Thread 1: Priority 395
Thread 3: Priority 395
Thread 4: Priority 394
Thread 3: Priority 394
Thread 1: Priority 394
Thread 0: Priority 394
Thread 2: Priority 394
Thread 4: Priority 393
Thread 1: Priority 393
Thread 2: Priority 393
Thread 0: Priority 393
Thread 3: Priority 393
Thread 2: Priority 392
Thread 4: Priority 392
Thread 1: Priority 392
Thread 0: Priority 392
Thread 3: Priority 392
Thread 1: Priority 391
Thread 4: Priority 391
Thread 2: Priority 391
Thread 3: Priority 391
Thread 0: Priority 391
Thread 4: Priority 390
Thread 2: Priority 390
Thread 1: Priority 390
Thread 0: Priority 390
Thread 3: Priority 390
Thread 4: Priority 389
Thread 0: Priority 389
Thread 1: Priority 389
Thread 2: Priority 389
Thread 3: Priority 389
Thread 4: Priority 388
Thread 3: Priority 388
Thread 1: Priority 388
Thread 0: Priority 388
Thread 2: Priority 388
Thread 0: Priority 387
Thread 1: Priority 387
Thread 4: Priority 387
Thread 2: Priority 387
Thread 3: Priority 387
Thread 0: Priority 386
Thread 2: Priority 386
Thread 4: Priority 386
Thread 1: Priority 386
Thread 3: Priority 386
Thread 2: Priority 385
Thread 4: Priority 385
Thread 0: Priority 385
Thread 1: Priority 385
Thread 3: Priority 385
Thread 4: Priority 384
Thread 1: Priority 384
Thread 0: Priority 384
Thread 2: Priority 384
Thread 3: Priority 384
Thread 3: Priority 383
Thread 4: Priority 383
Thread 1: Priority 383
Thread 0: Priority 383
Thread 2: Priority 383
Thread 4: Priority 382
Thread 1: Priority 382
Thread 0: Priority 382
Thread 2: Priority 382
Thread 3: Priority 382
Thread 4: Priority 381
Thread 1: Priority 381
Thread 0: Priority 381
Thread 2: Priority 381
Thread 3: Priority 381
Thread 4: Priority 380
Thread 3: Priority 380
Thread 1: Priority 380
Thread 0: Priority 380
Thread 2: Priority 380
Thread 4: Priority 379
Thread 2: Priority 379
Thread 1: Priority 379
Thread 0: Priority 379
Thread 3: Priority 379
Thread 3: Priority 378
Thread 4: Priority 378
Thread 0: Priority 378
Thread 2: Priority 378
Thread 1: Priority 378
Thread 2: Priority 377
Thread 4: Priority 377
Thread 0: Priority 377
Thread 1: Priority 377
Thread 3: Priority 377
Thread 2: Priority 376
Thread 1: Priority 376
Thread 0: Priority 376
Thread 4: Priority 376
Thread 3: Priority 376
Thread 0: Priority 375
Thread 4: Priority 375
Thread 1: Priority 375
Thread 2: Priority 375
Thread 3: Priority 375
Thread 2: Priority 374
Thread 4: Priority 374
Thread 3: Priority 374
Thread 1: Priority 374
Thread 0: Priority 374
Thread 4: Priority 373
Thread 1: Priority 373
Thread 2: Priority 373
Thread 3: Priority 373
Thread 0: Priority 373
Thread 1: Priority 372
Thread 0: Priority 372
Thread 2: Priority 372
Thread 4: Priority 372
Thread 3: Priority 372
Thread 4: Priority 371
Thread 3: Priority 371
Thread 1: Priority 371
Thread 2: Priority 371
Thread 0: Priority 371
Thread 1: Priority 370
Thread 2: Priority 370
Thread 3: Priority 370
Thread 4: Priority 370
Thread 0: Priority 370
Thread 4: Priority 369
Thread 1: Priority 369
Thread 0: Priority 369
Thread 2: Priority 369
Thread 3: Priority 369
Thread 4: Priority 368
Thread 1: Priority 368
Thread 0: Priority 368
Thread 2: Priority 368
Thread 3: Priority 368
Thread 4: Priority 367
Thread 0: Priority 367
Thread 1: Priority 367
Thread 2: Priority 367
Thread 3: Priority 367
Thread 4: Priority 366
Thread 2: Priority 366
Thread 1: Priority 366
Thread 0: Priority 366
Thread 3: Priority 366
Thread 4: Priority 365
Thread 1: Priority 365
Thread 0: Priority 365
Thread 2: Priority 365
Thread 3: Priority 365
Thread 4: Priority 364
Thread 1: Priority 364
Thread 0: Priority 364
Thread 2: Priority 364
Thread 3: Priority 364
Thread 4: Priority 363
Thread 3: Priority 363
Thread 2: Priority 363
Thread 1: Priority 363
Thread 0: Priority 363
Thread 3: Priority 362
Thread 4: Priority 362
Thread 1: Priority 362
Thread 2: Priority 362
Thread 0: Priority 362
Thread 4: Priority 361
Thread 2: Priority 361
Thread 1: Priority 361
Thread 3: Priority 361
Thread 0: Priority 361
Thread 2: Priority 360
Thread 4: Priority 360
Thread 0: Priority 360
Thread 3: Priority 360
Thread 1: Priority 360
Thread 0: Priority 359
Thread 4: Priority 359
Thread 3: Priority 359
Thread 1: Priority 359
Thread 2: Priority 359
Thread 1: Priority 358
Thread 3: Priority 358
Thread 4: Priority 358
Thread 0: Priority 358
Thread 2: Priority 358
Thread 1: Priority 357
Thread 4: Priority 357
Thread 0: Priority 357
Thread 2: Priority 357
Thread 3: Priority 357
Thread 2: Priority 356
Thread 1: Priority 356
Thread 3: Priority 356
Thread 4: Priority 356
Thread 0: Priority 356
Thread 4: Priority 355
Thread 1: Priority 355
Thread 0: Priority 355
Thread 2: Priority 355
Thread 3: Priority 355
Thread 2: Priority 354
Thread 4: Priority 354
Thread 1: Priority 354
Thread 0: Priority 354
Thread 3: Priority 354
Thread 4: Priority 353
Thread 1: Priority 353
Thread 0: Priority 353
Thread 2: Priority 353
Thread 3: Priority 353
Thread 2: Priority 352
Thread 0: Priority 352
Thread 1: Priority 352
Thread 4: Priority 352
Thread 3: Priority 352
Thread 4: Priority 351
Thread 1: Priority 351
Thread 0: Priority 351
Thread 2: Priority 351
Thread 3: Priority 351
Thread 4: Priority 350
Thread 0: Priority 350
Thread 2: Priority 350
Thread 3: Priority 350
Thread 1: Priority 350
Thread 4: Priority 349
Thread 0: Priority 349
Thread 1: Priority 349
Thread 3: Priority 349
Thread 2: Priority 349
Thread 0: Priority 348
Thread 4: Priority 348
Thread 1: Priority 348
Thread 2: Priority 348
Thread 3: Priority 348
Thread 4: Priority 347
Thread 1: Priority 347
Thread 0: Priority 347
Thread 2: Priority 347
Thread 3: Priority 347
Thread 1: Priority 346
Thread 0: Priority 346
Thread 2: Priority 346
Thread 4: Priority 346
Thread 3: Priority 346
Thread 4: Priority 345
Thread 1: Priority 345
Thread 3: Priority 345
Thread 2: Priority 345
Thread 0: Priority 345
Thread 2: Priority 344
Thread 3: Priority 344
Thread 1: Priority 344
Thread 4: Priority 344
Thread 0: Priority 344
Thread 0: Priority 343
Thread 1: Priority 343
Thread 4: Priority 343
Thread 2: Priority 343
Thread 3: Priority 343
Thread 2: Priority 342
Thread 1: Priority 342
Thread 0: Priority 342
Thread 3: Priority 342
Thread 4: Priority 342
Thread 4: Priority 341
Thread 0: Priority 341
Thread 1: Priority 341
Thread 3: Priority 341
Thread 2: Priority 341
Thread 4: Priority 340
Thread 0: Priority 340
Thread 1: Priority 340
Thread 2: Priority 340
Thread 3: Priority 340
Thread 1: Priority 339
Thread 2: Priority 339
Thread 4: Priority 339
Thread 0: Priority 339
Thread 3: Priority 339
Thread 4: Priority 338
Thread 0: Priority 338
Thread 1: Priority 338
Thread 2: Priority 338
Thread 3: Priority 338
Thread 4: Priority 337
Thread 1: Priority 337
Thread 0: Priority 337
Thread 2: Priority 337
Thread 3: Priority 337
Thread 4: Priority 336
Thread 1: Priority 336
Thread 2: Priority 336
Thread 3: Priority 336
Thread 0: Priority 336
Thread 4: Priority 335
Thread 0: Priority 335
Thread 2: Priority 335
Thread 1: Priority 335
Thread 3: Priority 335
Thread 2: Priority 334
Thread 1: Priority 334
Thread 3: Priority 334
Thread 4: Priority 334
Thread 0: Priority 334
Thread 4: Priority 333
Thread 3: Priority 333
Thread 1: Priority 333
Thread 2: Priority 333
Thread 0: Priority 333
Thread 4: Priority 332
Thread 3: Priority 332
Thread 1: Priority 332
Thread 0: Priority 332
Thread 2: Priority 332
Thread 2: Priority 331
Thread 4: Priority 331
Thread 1: Priority 331
Thread 0: Priority 331
Thread 3: Priority 331
Thread 1: Priority 330
Thread 2: Priority 330
Thread 4: Priority 330
Thread 0: Priority 330
Thread 3: Priority 330
Thread 4: Priority 329
Thread 0: Priority 329
Thread 1: Priority 329
Thread 2: Priority 329
Thread 3: Priority 329
Thread 1: Priority 328
Thread 2: Priority 328
Thread 4: Priority 328
Thread 3: Priority 328
Thread 0: Priority 328
Thread 4: Priority 327
Thread 0: Priority 327
Thread 1: Priority 327
Thread 2: Priority 327
Thread 3: Priority 327
Thread 2: Priority 326
Thread 4: Priority 326
Thread 1: Priority 326
Thread 0: Priority 326
Thread 3: Priority 326
Thread 4: Priority 325
Thread 1: Priority 325
Thread 3: Priority 325
Thread 0: Priority 325
Thread 2: Priority 325
Thread 2: Priority 324
Thread 1: Priority 324
Thread 3: Priority 324
Thread 4: Priority 324
Thread 0: Priority 324
Thread 1: Priority 323
Thread 0: Priority 323
Thread 4: Priority 323
Thread 2: Priority 323
Thread 3: Priority 323
Thread 4: Priority 322
Thread 0: Priority 322
Thread 1: Priority 322
Thread 2: Priority 322
Thread 3: Priority 322
Thread 4: Priority 321
Thread 2: Priority 321
Thread 0: Priority 321
Thread 1: Priority 321
Thread 3: Priority 321
Thread 2: Priority 320
Thread 0: Priority 320
Thread 1: Priority 320
Thread 3: Priority 320
Thread 4: Priority 320
Thread 3: Priority 319
Thread 0: Priority 319
Thread 1: Priority 319
Thread 4: Priority 319
Thread 2: Priority 319
Thread 0: Priority 318
Thread 4: Priority 318
Thread 1: Priority 318
Thread 2: Priority 318
Thread 3: Priority 318
Thread 4: Priority 317
Thread 3: Priority 317
Thread 0: Priority 317
Thread 2: Priority 317
Thread 1: Priority 317
Thread 2: Priority 316
Thread 4: Priority 316
Thread 1: Priority 316
Thread 0: Priority 316
Thread 3: Priority 316
Thread 2: Priority 315
Thread 4: Priority 315
Thread 1: Priority 315
Thread 0: Priority 315
Thread 3: Priority 315
Thread 1: Priority 314
Thread 4: Priority 314
Thread 2: Priority 314
Thread 3: Priority 314
Thread 0: Priority 314
Thread 4: Priority 313
Thread 1: Priority 313
Thread 0: Priority 313
Thread 2: Priority 313
Thread 3: Priority 313
Thread 1: Priority 312
Thread 3: Priority 312
Thread 4: Priority 312
Thread 2: Priority 312
Thread 0: Priority 312
Thread 4: Priority 311
Thread 0: Priority 311
Thread 1: Priority 311
Thread 2: Priority 311
Thread 3: Priority 311
Thread 1: Priority 310
Thread 0: Priority 310
Thread 2: Priority 310
Thread 3: Priority 310
Thread 4: Priority 310
Thread 0: Priority 309
Thread 4: Priority 309
Thread 3: Priority 309
Thread 1: Priority 309
Thread 2: Priority 309
Thread 2: Priority 308
Thread 4: Priority 308
Thread 1: Priority 308
Thread 3: Priority 308
Thread 0: Priority 308
Thread 4: Priority 307
Thread 0: Priority 307
Thread 2: Priority 307
Thread 1: Priority 307
Thread 3: Priority 307
Thread 1: Priority 306
Thread 2: Priority 306
Thread 4: Priority 306
Thread 0: Priority 306
Thread 3: Priority 306
Thread 4: Priority 305
Thread 2: Priority 305
Thread 1: Priority 305
Thread 0: Priority 305
Thread 3: Priority 305
Thread 4: Priority 304
Thread 1: Priority 304
Thread 2: Priority 304
Thread 0: Priority 304
Thread 3: Priority 304
Thread 3: Priority 303
Thread 1: Priority 303
Thread 2: Priority 303
Thread 0: Priority 303
Thread 4: Priority 303
Thread 1: Priority 302
Thread 3: Priority 302
Thread 2: Priority 302
Thread 0: Priority 302
Thread 4: Priority 302
Thread 4: Priority 301
Thread 1: Priority 301
Thread 2: Priority 301
Thread 0: Priority 301
Thread 3: Priority 301
Thread 1: Priority 300
Thread 3: Priority 300
Thread 2: Priority 300
Thread 0: Priority 300
Thread 4: Priority 300
Thread 4: Priority 299
Thread 2: Priority 299
Thread 1: Priority 299
Thread 0: Priority 299
Thread 3: Priority 299
Thread 2: Priority 298
Thread 4: Priority 298
Thread 1: Priority 298
Thread 3: Priority 298
Thread 0: Priority 298
Thread 4: Priority 297
Thread 2: Priority 297
Thread 0: Priority 297
Thread 1: Priority 297
Thread 3: Priority 297
Thread 1: Priority 296
Thread 2: Priority 296
Thread 4: Priority 296
Thread 0: Priority 296
Thread 3: Priority 296
Thread 4: Priority 295
Thread 1: Priority 295
Thread 2: Priority 295
Thread 0: Priority 295
Thread 3: Priority 295
Thread 3: Priority 294
Thread 4: Priority 294
Thread 2: Priority 294
Thread 1: Priority 294
Thread 0: Priority 294
Thread 4: Priority 293
Thread 1: Priority 293
Thread 2: Priority 293
Thread 0: Priority 293
Thread 3: Priority 293
Thread 1: Priority 292
Thread 3: Priority 292
Thread 2: Priority 292
Thread 0: Priority 292
Thread 4: Priority 292
Thread 3: Priority 291
Thread 4: Priority 291
Thread 2: Priority 291
Thread 0: Priority 291
Thread 1: Priority 291
Thread 4: Priority 290
Thread 2: Priority 290
Thread 1: Priority 290
Thread 0: Priority 290
Thread 3: Priority 290
Thread 3: Priority 289
Thread 4: Priority 289
Thread 2: Priority 289
Thread 0: Priority 289
Thread 1: Priority 289
Thread 4: Priority 288
Thread 1: Priority 288
Thread 2: Priority 288
Thread 0: Priority 288
Thread 3: Priority 288
Thread 1: Priority 287
Thread 2: Priority 287
Thread 4: Priority 287
Thread 0: Priority 287
Thread 3: Priority 287
Thread 3: Priority 286
Thread 1: Priority 286
Thread 2: Priority 286
Thread 4: Priority 286
Thread 0: Priority 286
Thread 3: Priority 285
Thread 2: Priority 285
Thread 0: Priority 285
Thread 1: Priority 285
Thread 4: Priority 285
Thread 4: Priority 284
Thread 1: Priority 284
Thread 2: Priority 284
Thread 0: Priority 284
Thread 3: Priority 284
Thread 4: Priority 283
Thread 1: Priority 283
Thread 2: Priority 283
Thread 0: Priority 283
Thread 3: Priority 283
Thread 1: Priority 282
Thread 4: Priority 282
Thread 0: Priority 282
Thread 2: Priority 282
Thread 3: Priority 282
Thread 4: Priority 281
Thread 1: Priority 281
Thread 0: Priority 281
Thread 2: Priority 281
Thread 3: Priority 281
Thread 4: Priority 280
Thread 3: Priority 280
Thread 1: Priority 280
Thread 0: Priority 280
Thread 2: Priority 280
Thread 1: Priority 279
Thread 4: Priority 279
Thread 0: Priority 279
Thread 3: Priority 279
Thread 2: Priority 279
Thread 3: Priority 278
Thread 4: Priority 278
Thread 2: Priority 278
Thread 0: Priority 278
Thread 1: Priority 278
Thread 4: Priority 277
Thread 0: Priority 277
Thread 2: Priority 277
Thread 1: Priority 277
Thread 3: Priority 277
Thread 1: Priority 276
Thread 4: Priority 276
Thread 3: Priority 276
Thread 2: Priority 276
Thread 0: Priority 276
Thread 4: Priority 275
Thread 0: Priority 275
Thread 1: Priority 275
Thread 2: Priority 275
Thread 3: Priority 275
Thread 2: Priority 274
Thread 0: Priority 274
Thread 3: Priority 274
Thread 1: Priority 274
Thread 4: Priority 274
Thread 4: Priority 273
Thread 1: Priority 273
Thread 2: Priority 273
Thread 0: Priority 273
Thread 3: Priority 273
Thread 1: Priority 272
Thread 0: Priority 272
Thread 2: Priority 272
Thread 3: Priority 272
Thread 4: Priority 272
Thread 2: Priority 271
Thread 4: Priority 271
Thread 0: Priority 271
Thread 1: Priority 271
Thread 3: Priority 271
Thread 4: Priority 270
Thread 3: Priority 270
Thread 2: Priority 270
Thread 0: Priority 270
Thread 1: Priority 270
Thread 4: Priority 269
Thread 1: Priority 269
Thread 0: Priority 269
Thread 2: Priority 269
Thread 3: Priority 269
Thread 1: Priority 268
Thread 2: Priority 268
Thread 0: Priority 268
Thread 3: Priority 268
Thread 4: Priority 268
Thread 4: Priority 267
Thread 1: Priority 267
Thread 2: Priority 267
Thread 3: Priority 267
Thread 0: Priority 267
Thread 4: Priority 266
Thread 3: Priority 266
Thread 1: Priority 266
Thread 0: Priority 266
Thread 2: Priority 266
Thread 2: Priority 265
Thread 1: Priority 265
Thread 4: Priority 265
Thread 0: Priority 265
Thread 3: Priority 265
Thread 3: Priority 264
Thread 1: Priority 264
Thread 0: Priority 264
Thread 4: Priority 264
Thread 2: Priority 264
Thread 3: Priority 263
Thread 1: Priority 263
Thread 0: Priority 263
Thread 4: Priority 263
Thread 2: Priority 263
Thread 4: Priority 262
Thread 1: Priority 262
Thread 0: Priority 262
Thread 3: Priority 262
Thread 2: Priority 262
Thread 1: Priority 261
Thread 4: Priority 261
Thread 0: Priority 261
Thread 3: Priority 261
Thread 2: Priority 261
Thread 0: Priority 260
Thread 3: Priority 260
Thread 4: Priority 260
Thread 1: Priority 260
Thread 2: Priority 260
Thread 2: Priority 259
Thread 0: Priority 259
Thread 4: Priority 259
Thread 3: Priority 259
Thread 1: Priority 259
Thread 2: Priority 258
Thread 4: Priority 258
Thread 3: Priority 258
Thread 0: Priority 258
Thread 1: Priority 258
Thread 2: Priority 257
Thread 3: Priority 257
Thread 1: Priority 257
Thread 0: Priority 257
Thread 4: Priority 257
Thread 2: Priority 256
Thread 4: Priority 256
Thread 1: Priority 256
Thread 0: Priority 256
Thread 3: Priority 256
Thread 1: Priority 255
Thread 0: Priority 255
Thread 3: Priority 255
Thread 2: Priority 255
Thread 4: Priority 255
Thread 0: Priority 254
Thread 4: Priority 254
Thread 3: Priority 254
Thread 1: Priority 254
Thread 2: Priority 254
Thread 1: Priority 253
Thread 2: Priority 253
Thread 4: Priority 253
Thread 0: Priority 253
Thread 3: Priority 253
Thread 4: Priority 252
Thread 0: Priority 252
Thread 2: Priority 252
Thread 3: Priority 252
Thread 1: Priority 252
Thread 4: Priority 251
Thread 2: Priority 251
Thread 0: Priority 251
Thread 3: Priority 251
Thread 1: Priority 251
Thread 0: Priority 250
Thread 1: Priority 250
Thread 2: Priority 250
Thread 3: Priority 250
Thread 4: Priority 250
Thread 1: Priority 249
Thread 2: Priority 249
Thread 3: Priority 249
Thread 0: Priority 249
Thread 4: Priority 249
Thread 4: Priority 248
Thread 2: Priority 248
Thread 0: Priority 248
Thread 3: Priority 248
Thread 1: Priority 248
Thread 4: Priority 247
Thread 0: Priority 247
Thread 2: Priority 247
Thread 3: Priority 247
Thread 1: Priority 247
Thread 2: Priority 246
Thread 1: Priority 246
Thread 3: Priority 246
Thread 0: Priority 246
Thread 4: Priority 246
Thread 1: Priority 245
Thread 2: Priority 245
Thread 0: Priority 245
Thread 3: Priority 245
Thread 4: Priority 245
Thread 4: Priority 244
Thread 0: Priority 244
Thread 1: Priority 244
Thread 3: Priority 244
Thread 2: Priority 244
Thread 0: Priority 243
Thread 3: Priority 243
Thread 1: Priority 243
Thread 2: Priority 243
Thread 4: Priority 243
Thread 4: Priority 242
Thread 3: Priority 242
Thread 0: Priority 242
Thread 2: Priority 242
Thread 1: Priority 242
Thread 0: Priority 241
Thread 4: Priority 241
Thread 2: Priority 241
Thread 1: Priority 241
Thread 3: Priority 241
Thread 2: Priority 240
Thread 1: Priority 240
Thread 0: Priority 240
Thread 3: Priority 240
Thread 4: Priority 240
Thread 4: Priority 239
Thread 1: Priority 239
Thread 3: Priority 239
Thread 0: Priority 239
Thread 2: Priority 239
Thread 0: Priority 238
Thread 3: Priority 238
Thread 1: Priority 238
Thread 2: Priority 238
Thread 4: Priority 238
Thread 4: Priority 237
Thread 2: Priority 237
Thread 0: Priority 237
Thread 3: Priority 237
Thread 1: Priority 237
Thread 3: Priority 236
Thread 0: Priority 236
Thread 2: Priority 236
Thread 4: Priority 236
Thread 1: Priority 236
Thread 1: Priority 235
Thread 0: Priority 235
Thread 3: Priority 235
Thread 2: Priority 235
Thread 4: Priority 235
Thread 4: Priority 234
Thread 1: Priority 234
Thread 2: Priority 234
Thread 0: Priority 234
Thread 3: Priority 234
Thread 4: Priority 233
Thread 0: Priority 233
Thread 3: Priority 233
Thread 1: Priority 233
Thread 2: Priority 233
Thread 4: Priority 232
Thread 0: Priority 232
Thread 3: Priority 232
Thread 2: Priority 232
Thread 1: Priority 232
Thread 2: Priority 231
Thread 0: Priority 231
Thread 1: Priority 231
Thread 3: Priority 231
Thread 4: Priority 231
Thread 4: Priority 230
Thread 0: Priority 230
Thread 3: Priority 230
Thread 1: Priority 230
Thread 2: Priority 230
Thread 4: Priority 229
Thread 1: Priority 229
Thread 0: Priority 229
Thread 3: Priority 229
Thread 2: Priority 229
Thread 0: Priority 228
Thread 4: Priority 228
Thread 3: Priority 228
Thread 1: Priority 228
Thread 2: Priority 228
Thread 1: Priority 227
Thread 0: Priority 227
Thread 3: Priority 227
Thread 4: Priority 227
Thread 2: Priority 227
Thread 2: Priority 226
Thread 4: Priority 226
Thread 0: Priority 226
Thread 3: Priority 226
Thread 1: Priority 226
Thread 0: Priority 225
Thread 3: Priority 225
Thread 1: Priority 225
Thread 2: Priority 225
Thread 4: Priority 225
Thread 0: Priority 224
Thread 4: Priority 224
Thread 3: Priority 224
Thread 2: Priority 224
Thread 1: Priority 224
Thread 0: Priority 223
Thread 3: Priority 223
Thread 4: Priority 223
Thread 2: Priority 223
Thread 1: Priority 223
Thread 1: Priority 222
Thread 0: Priority 222
Thread 4: Priority 222
Thread 3: Priority 222
Thread 2: Priority 222
Thread 3: Priority 221
Thread 4: Priority 221
Thread 0: Priority 221
Thread 1: Priority 221
Thread 2: Priority 221
Thread 4: Priority 220
Thread 3: Priority 220
Thread 0: Priority 220
Thread 1: Priority 220
Thread 2: Priority 220
Thread 0: Priority 219
Thread 1: Priority 219
Thread 2: Priority 219
Thread 3: Priority 219
Thread 4: Priority 219
Thread 0: Priority 218
Thread 4: Priority 218
Thread 2: Priority 218
Thread 1: Priority 218
Thread 3: Priority 218
Thread 2: Priority 217
Thread 1: Priority 217
Thread 3: Priority 217
Thread 4: Priority 217
Thread 0: Priority 217
Thread 0: Priority 216
Thread 3: Priority 216
Thread 4: Priority 216
Thread 1: Priority 216
Thread 2: Priority 216
Thread 0: Priority 215
Thread 3: Priority 215
Thread 4: Priority 215
Thread 1: Priority 215
Thread 2: Priority 215
Thread 1: Priority 214
Thread 0: Priority 214
Thread 4: Priority 214
Thread 3: Priority 214
Thread 2: Priority 214
Thread 1: Priority 213
Thread 3: Priority 213
Thread 4: Priority 213
Thread 2: Priority 213
Thread 0: Priority 213
Thread 3: Priority 212
Thread 4: Priority 212
Thread 0: Priority 212
Thread 1: Priority 212
Thread 2: Priority 212
Thread 1: Priority 211
Thread 2: Priority 211
Thread 3: Priority 211
Thread 0: Priority 211
Thread 4: Priority 211
Thread 0: Priority 210
Thread 4: Priority 210
Thread 1: Priority 210
Thread 2: Priority 210
Thread 3: Priority 210
Thread 0: Priority 209
Thread 3: Priority 209
Thread 2: Priority 209
Thread 4: Priority 209
Thread 1: Priority 209
Thread 1: Priority 208
Thread 4: Priority 208
Thread 0: Priority 208
Thread 2: Priority 208
Thread 3: Priority 208
Thread 0: Priority 207
Thread 4: Priority 207
Thread 1: Priority 207
Thread 2: Priority 207
Thread 3: Priority 207
Thread 2: Priority 206
Thread 4: Priority 206
Thread 1: Priority 206
Thread 3: Priority 206
Thread 0: Priority 206
Thread 1: Priority 205
Thread 3: Priority 205
Thread 0: Priority 205
Thread 4: Priority 205
Thread 2: Priority 205
Thread 3: Priority 204
Thread 1: Priority 204
Thread 4: Priority 204
Thread 0: Priority 204
Thread 2: Priority 204
Thread 3: Priority 203
Thread 4: Priority 203
Thread 1: Priority 203
Thread 2: Priority 203
Thread 0: Priority 203
Thread 3: Priority 202
Thread 0: Priority 202
Thread 4: Priority 202
Thread 1: Priority 202
Thread 2: Priority 202
Thread 2: Priority 201
Thread 3: Priority 201
Thread 1: Priority 201
Thread 0: Priority 201
Thread 4: Priority 201
Thread 4: Priority 200
Thread 1: Priority 200
Thread 3: Priority 200
Thread 2: Priority 200
Thread 0: Priority 200
Thread 2: Priority 199
Thread 0: Priority 199
Thread 4: Priority 199
Thread 1: Priority 199
Thread 3: Priority 199
Thread 3: Priority 198
Thread 1: Priority 198
Thread 4: Priority 198
Thread 0: Priority 198
Thread 2: Priority 198
Thread 4: Priority 197
Thread 2: Priority 197
Thread 0: Priority 197
Thread 3: Priority 197
Thread 1: Priority 197
Thread 1: Priority 196
Thread 3: Priority 196
Thread 4: Priority 196
Thread 0: Priority 196
Thread 2: Priority 196
Thread 4: Priority 195
Thread 0: Priority 195
Thread 1: Priority 195
Thread 3: Priority 195
Thread 2: Priority 195
Thread 0: Priority 194
Thread 4: Priority 194
Thread 2: Priority 194
Thread 3: Priority 194
Thread 1: Priority 194
Thread 2: Priority 193
Thread 1: Priority 193
Thread 0: Priority 193
Thread 3: Priority 193
Thread 4: Priority 193
Thread 0: Priority 192
Thread 1: Priority 192
Thread 4: Priority 192
Thread 2: Priority 192
Thread 3: Priority 192
Thread 2: Priority 191
Thread 1: Priority 191
Thread 4: Priority 191
Thread 0: Priority 191
Thread 3: Priority 191
Thread 1: Priority 190
Thread 3: Priority 190
Thread 0: Priority 190
Thread 4: Priority 190
Thread 2: Priority 190
Thread 1: Priority 189
Thread 0: Priority 189
Thread 2: Priority 189
Thread 3: Priority 189
Thread 4: Priority 189
Thread 3: Priority 188
Thread 1: Priority 188
Thread 2: Priority 188
Thread 4: Priority 188
Thread 0: Priority 188
Thread 2: Priority 187
Thread 3: Priority 187
Thread 4: Priority 187
Thread 1: Priority 187
Thread 0: Priority 187
Thread 3: Priority 186
Thread 4: Priority 186
Thread 2: Priority 186
Thread 1: Priority 186
Thread 0: Priority 186
Thread 3: Priority 185
Thread 0: Priority 185
Thread 4: Priority 185
Thread 1: Priority 185
Thread 2: Priority 185
Thread 4: Priority 184
Thread 0: Priority 184
Thread 1: Priority 184
Thread 3: Priority 184
Thread 2: Priority 184
Thread 0: Priority 183
Thread 3: Priority 183
Thread 2: Priority 183
Thread 1: Priority 183
Thread 4: Priority 183
Thread 0: Priority 182
Thread 2: Priority 182
Thread 3: Priority 182
Thread 4: Priority 182
Thread 1: Priority 182
Thread 3: Priority 181
Thread 1: Priority 181
Thread 0: Priority 181
Thread 4: Priority 181
Thread 2: Priority 181
Thread 2: Priority 180
Thread 3: Priority 180
Thread 1: Priority 180
Thread 4: Priority 180
Thread 0: Priority 180
Thread 1: Priority 179
Thread 3: Priority 179
Thread 4: Priority 179
Thread 2: Priority 179
Thread 0: Priority 179
Thread 4: Priority 178
Thread 0: Priority 178
Thread 3: Priority 178
Thread 1: Priority 178
Thread 2: Priority 178
Thread 3: Priority 177
Thread 0: Priority 177
Thread 4: Priority 177
Thread 1: Priority 177
Thread 2: Priority 177
Thread 3: Priority 176
Thread 2: Priority 176
Thread 0: Priority 176
Thread 1: Priority 176
Thread 4: Priority 176
Thread 4: Priority 175
Thread 0: Priority 175
Thread 2: Priority 175
Thread 1: Priority 175
Thread 3: Priority 175
Thread 3: Priority 174
Thread 1: Priority 174
Thread 0: Priority 174
Thread 4: Priority 174
Thread 2: Priority 174
Thread 2: Priority 173
Thread 3: Priority 173
Thread 1: Priority 173
Thread 4: Priority 173
Thread 0: Priority 173
Thread 2: Priority 172
Thread 4: Priority 172
Thread 3: Priority 172
Thread 1: Priority 172
Thread 0: Priority 172
Thread 0: Priority 171
Thread 1: Priority 171
Thread 3: Priority 171
Thread 2: Priority 171
Thread 4: Priority 171
Thread 0: Priority 170
Thread 1: Priority 170
Thread 2: Priority 170
Thread 4: Priority 170
Thread 3: Priority 170
Thread 4: Priority 169
Thread 0: Priority 169
Thread 2: Priority 169
Thread 3: Priority 169
Thread 1: Priority 169
Thread 1: Priority 168
Thread 4: Priority 168
Thread 3: Priority 168
Thread 0: Priority 168
Thread 2: Priority 168
Thread 3: Priority 167
Thread 4: Priority 167
Thread 0: Priority 167
Thread 2: Priority 167
Thread 1: Priority 167
Thread 0: Priority 166
Thread 2: Priority 166
Thread 1: Priority 166
Thread 3: Priority 166
Thread 4: Priority 166
Thread 0: Priority 165
Thread 4: Priority 165
Thread 3: Priority 165
Thread 2: Priority 165
Thread 1: Priority 165
Thread 4: Priority 164
Thread 0: Priority 164
Thread 1: Priority 164
Thread 2: Priority 164
Thread 3: Priority 164
Thread 0: Priority 163
Thread 1: Priority 163
Thread 3: Priority 163
Thread 4: Priority 163
Thread 2: Priority 163
Thread 3: Priority 162
Thread 2: Priority 162
Thread 0: Priority 162
Thread 4: Priority 162
Thread 1: Priority 162
Thread 3: Priority 161
Thread 4: Priority 161
Thread 2: Priority 161
Thread 1: Priority 161
Thread 0: Priority 161
Thread 3: Priority 160
Thread 1: Priority 160
Thread 0: Priority 160
Thread 2: Priority 160
Thread 4: Priority 160
Thread 3: Priority 159
Thread 4: Priority 159
Thread 0: Priority 159
Thread 1: Priority 159
Thread 2: Priority 159
Thread 4: Priority 158
Thread 1: Priority 158
Thread 2: Priority 158
Thread 0: Priority 158
Thread 3: Priority 158
Thread 3: Priority 157
Thread 0: Priority 157
Thread 2: Priority 157
Thread 1: Priority 157
Thread 4: Priority 157
Thread 1: Priority 156
Thread 0: Priority 156
Thread 3: Priority 156
Thread 2: Priority 156
Thread 4: Priority 156
Thread 0: Priority 155
Thread 3: Priority 155
Thread 4: Priority 155
Thread 1: Priority 155
Thread 2: Priority 155
Thread 2: Priority 154
Thread 3: Priority 154
Thread 4: Priority 154
Thread 1: Priority 154
Thread 0: Priority 154
Thread 0: Priority 153
Thread 3: Priority 153
Thread 4: Priority 153
Thread 1: Priority 153
Thread 2: Priority 153
Thread 1: Priority 152
Thread 3: Priority 152
Thread 4: Priority 152
Thread 2: Priority 152
Thread 0: Priority 152
Thread 3: Priority 151
Thread 2: Priority 151
Thread 0: Priority 151
Thread 1: Priority 151
Thread 4: Priority 151
Thread 3: Priority 150
Thread 0: Priority 150
Thread 2: Priority 150
Thread 1: Priority 150
Thread 4: Priority 150
Thread 3: Priority 149
Thread 2: Priority 149
Thread 4: Priority 149
Thread 1: Priority 149
Thread 0: Priority 149
Thread 2: Priority 148
Thread 1: Priority 148
Thread 4: Priority 148
Thread 0: Priority 148
Thread 3: Priority 148
Thread 3: Priority 147
Thread 1: Priority 147
Thread 4: Priority 147
Thread 0: Priority 147
Thread 2: Priority 147
Thread 0: Priority 146
Thread 4: Priority 146
Thread 3: Priority 146
Thread 1: Priority 146
Thread 2: Priority 146
Thread 0: Priority 145
Thread 4: Priority 145
Thread 1: Priority 145
Thread 3: Priority 145
Thread 2: Priority 145
Thread 4: Priority 144
Thread 0: Priority 144
Thread 1: Priority 144
Thread 2: Priority 144
Thread 3: Priority 144
Thread 3: Priority 143
Thread 4: Priority 143
Thread 2: Priority 143
Thread 0: Priority 143
Thread 1: Priority 143
Thread 1: Priority 142
Thread 3: Priority 142
Thread 2: Priority 142
Thread 0: Priority 142
Thread 4: Priority 142
Thread 3: Priority 141
Thread 0: Priority 141
Thread 1: Priority 141
Thread 2: Priority 141
Thread 4: Priority 141
Thread 2: Priority 140
Thread 4: Priority 140
Thread 3: Priority 140
Thread 0: Priority 140
Thread 1: Priority 140
Thread 4: Priority 139
Thread 1: Priority 139
Thread 2: Priority 139
Thread 3: Priority 139
Thread 0: Priority 139
Thread 0: Priority 138
Thread 1: Priority 138
Thread 2: Priority 138
Thread 3: Priority 138
Thread 4: Priority 138
Thread 1: Priority 137
Thread 4: Priority 137
Thread 0: Priority 137
Thread 2: Priority 137
Thread 3: Priority 137
Thread 3: Priority 136
Thread 2: Priority 136
Thread 4: Priority 136
Thread 1: Priority 136
Thread 0: Priority 136
Thread 2: Priority 135
Thread 0: Priority 135
Thread 3: Priority 135
Thread 4: Priority 135
Thread 1: Priority 135
Thread 2: Priority 134
Thread 0: Priority 134
Thread 4: Priority 134
Thread 3: Priority 134
Thread 1: Priority 134
Thread 4: Priority 133
Thread 3: Priority 133
Thread 1: Priority 133
Thread 2: Priority 133
Thread 0: Priority 133
Thread 1: Priority 132
Thread 2: Priority 132
Thread 0: Priority 132
Thread 4: Priority 132
Thread 3: Priority 132
Thread 2: Priority 131
Thread 1: Priority 131
Thread 4: Priority 131
Thread 0: Priority 131
Thread 3: Priority 131
Thread 3: Priority 130
Thread 0: Priority 130
Thread 4: Priority 130
Thread 2: Priority 130
Thread 1: Priority 130
Thread 1: Priority 129
Thread 4: Priority 129
Thread 0: Priority 129
Thread 2: Priority 129
Thread 3: Priority 129
Thread 2: Priority 128
Thread 3: Priority 128
Thread 0: Priority 128
Thread 4: Priority 128
Thread 1: Priority 128
Thread 2: Priority 127
Thread 4: Priority 127
Thread 0: Priority 127
Thread 1: Priority 127
Thread 3: Priority 127
Thread 0: Priority 126
Thread 4: Priority 126
Thread 3: Priority 126
Thread 2: Priority 126
Thread 1: Priority 126
Thread 3: Priority 125
Thread 4: Priority 125
Thread 1: Priority 125
Thread 2: Priority 125
Thread 0: Priority 125
Thread 4: Priority 124
Thread 2: Priority 124
Thread 0: Priority 124
Thread 3: Priority 124
Thread 1: Priority 124
Thread 4: Priority 123
Thread 0: Priority 123
Thread 2: Priority 123
Thread 3: Priority 123
Thread 1: Priority 123
Thread 3: Priority 122
Thread 4: Priority 122
Thread 1: Priority 122
Thread 2: Priority 122
Thread 0: Priority 122
Thread 1: Priority 121
Thread 0: Priority 121
Thread 3: Priority 121
Thread 2: Priority 121
Thread 4: Priority 121
Thread 2: Priority 120
Thread 4: Priority 120
Thread 3: Priority 120
Thread 1: Priority 120
Thread 0: Priority 120
Thread 1: Priority 119
Thread 3: Priority 119
Thread 0: Priority 119
Thread 2: Priority 119
Thread 4: Priority 119
Thread 1: Priority 118
Thread 2: Priority 118
Thread 4: Priority 118
Thread 3: Priority 118
Thread 0: Priority 118
Thread 2: Priority 117
Thread 0: Priority 117
Thread 3: Priority 117
Thread 4: Priority 117
Thread 1: Priority 117
Thread 3: Priority 116
Thread 1: Priority 116
Thread 4: Priority 116
Thread 0: Priority 116
Thread 2: Priority 116
Thread 1: Priority 115
Thread 4: Priority 115
Thread 3: Priority 115
Thread 2: Priority 115
Thread 0: Priority 115
Thread 4: Priority 114
Thread 3: Priority 114
Thread 0: Priority 114
Thread 2: Priority 114
Thread 1: Priority 114
Thread 4: Priority 113
Thread 0: Priority 113
Thread 2: Priority 113
Thread 1: Priority 113
Thread 3: Priority 113
Thread 0: Priority 112
Thread 1: Priority 112
Thread 2: Priority 112
Thread 4: Priority 112
Thread 3: Priority 112
Thread 0: Priority 111
Thread 2: Priority 111
Thread 4: Priority 111
Thread 1: Priority 111
Thread 3: Priority 111
Thread 1: Priority 110
Thread 3: Priority 110
Thread 2: Priority 110
Thread 4: Priority 110
Thread 0: Priority 110
Thread 3: Priority 109
Thread 1: Priority 109
Thread 0: Priority 109
Thread 4: Priority 109
Thread 2: Priority 109
Thread 1: Priority 108
Thread 0: Priority 108
Thread 4: Priority 108
Thread 3: Priority 108
Thread 2: Priority 108
Thread 3: Priority 107
Thread 2: Priority 107
Thread 0: Priority 107
Thread 4: Priority 107
Thread 1: Priority 107
Thread 1: Priority 106
Thread 2: Priority 106
Thread 4: Priority 106
Thread 3: Priority 106
Thread 0: Priority 106
Thread 4: Priority 105
Thread 3: Priority 105
Thread 2: Priority 105
Thread 0: Priority 105
Thread 1: Priority 105
Thread 1: Priority 104
Thread 2: Priority 104
Thread 0: Priority 104
Thread 3: Priority 104
Thread 4: Priority 104
Thread 1: Priority 103
Thread 3: Priority 103
Thread 0: Priority 103
Thread 4: Priority 103
Thread 2: Priority 103
Thread 1: Priority 102
Thread 3: Priority 102
Thread 0: Priority 102
Thread 4: Priority 102
Thread 2: Priority 102
Thread 4: Priority 101
Thread 0: Priority 101
Thread 3: Priority 101
Thread 2: Priority 101
Thread 1: Priority 101
Thread 3: Priority 100
Thread 2: Priority 100
Thread 4: Priority 100
Thread 1: Priority 100
Thread 0: Priority 100
Thread 1: Priority 99
Thread 2: Priority 99
Thread 3: Priority 99
Thread 0: Priority 99
Thread 4: Priority 99
Thread 2: Priority 98
Thread 0: Priority 98
Thread 3: Priority 98
Thread 1: Priority 98
Thread 4: Priority 98
Thread 3: Priority 97
Thread 1: Priority 97
Thread 4: Priority 97
Thread 2: Priority 97
Thread 0: Priority 97
Thread 2: Priority 96
Thread 0: Priority 96
Thread 1: Priority 96
Thread 3: Priority 96
Thread 4: Priority 96
Thread 2: Priority 95
Thread 4: Priority 95
Thread 3: Priority 95
Thread 1: Priority 95
Thread 0: Priority 95
Thread 1: Priority 94
Thread 2: Priority 94
Thread 3: Priority 94
Thread 4: Priority 94
Thread 0: Priority 94
Thread 1: Priority 93
Thread 3: Priority 93
Thread 4: Priority 93
Thread 0: Priority 93
Thread 2: Priority 93
Thread 0: Priority 92
Thread 4: Priority 92
Thread 3: Priority 92
Thread 1: Priority 92
Thread 2: Priority 92
Thread 3: Priority 91
Thread 2: Priority 91
Thread 1: Priority 91
Thread 0: Priority 91
Thread 4: Priority 91
Thread 4: Priority 90
Thread 1: Priority 90
Thread 3: Priority 90
Thread 2: Priority 90
Thread 0: Priority 90
Thread 2: Priority 89
Thread 3: Priority 89
Thread 4: Priority 89
Thread 1: Priority 89
Thread 0: Priority 89
Thread 2: Priority 88
Thread 1: Priority 88
Thread 0: Priority 88
Thread 3: Priority 88
Thread 4: Priority 88
Thread 2: Priority 87
Thread 1: Priority 87
Thread 4: Priority 87
Thread 3: Priority 87
Thread 0: Priority 87
Thread 4: Priority 86
Thread 0: Priority 86
Thread 2: Priority 86
Thread 1: Priority 86
Thread 3: Priority 86
Thread 4: Priority 85
Thread 1: Priority 85
Thread 2: Priority 85
Thread 0: Priority 85
Thread 3: Priority 85
Thread 4: Priority 84
Thread 3: Priority 84
Thread 0: Priority 84
Thread 2: Priority 84
Thread 1: Priority 84
Thread 4: Priority 83
Thread 1: Priority 83
Thread 2: Priority 83
Thread 0: Priority 83
Thread 3: Priority 83
Thread 1: Priority 82
Thread 4: Priority 82
Thread 3: Priority 82
Thread 0: Priority 82
Thread 2: Priority 82
Thread 4: Priority 81
Thread 2: Priority 81
Thread 3: Priority 81
Thread 1: Priority 81
Thread 0: Priority 81
Thread 2: Priority 80
Thread 3: Priority 80
Thread 4: Priority 80
Thread 1: Priority 80
Thread 0: Priority 80
Thread 4: Priority 79
Thread 0: Priority 79
Thread 3: Priority 79
Thread 2: Priority 79
Thread 1: Priority 79
Thread 0: Priority 78
Thread 2: Priority 78
Thread 1: Priority 78
Thread 3: Priority 78
Thread 4: Priority 78
Thread 3: Priority 77
Thread 0: Priority 77
Thread 4: Priority 77
Thread 2: Priority 77
Thread 1: Priority 77
Thread 3: Priority 76
Thread 1: Priority 76
Thread 0: Priority 76
Thread 4: Priority 76
Thread 2: Priority 76
Thread 0: Priority 75
Thread 2: Priority 75
Thread 3: Priority 75
Thread 4: Priority 75
Thread 1: Priority 75
Thread 0: Priority 74
Thread 4: Priority 74
Thread 2: Priority 74
Thread 1: Priority 74
Thread 3: Priority 74
Thread 3: Priority 73
Thread 1: Priority 73
Thread 2: Priority 73
Thread 4: Priority 73
Thread 0: Priority 73
Thread 1: Priority 72
Thread 2: Priority 72
Thread 3: Priority 72
Thread 4: Priority 72
Thread 0: Priority 72
Thread 3: Priority 71
Thread 4: Priority 71
Thread 0: Priority 71
Thread 1: Priority 71
Thread 2: Priority 71
Thread 0: Priority 70
Thread 3: Priority 70
Thread 2: Priority 70
Thread 1: Priority 70
Thread 4: Priority 70
Thread 4: Priority 69
Thread 2: Priority 69
Thread 1: Priority 69
Thread 0: Priority 69
Thread 3: Priority 69
Thread 3: Priority 68
Thread 0: Priority 68
Thread 2: Priority 68
Thread 1: Priority 68
Thread 4: Priority 68
Thread 3: Priority 67
Thread 4: Priority 67
Thread 1: Priority 67
Thread 0: Priority 67
Thread 2: Priority 67
Thread 4: Priority 66
Thread 3: Priority 66
Thread 1: Priority 66
Thread 0: Priority 66
Thread 2: Priority 66
Thread 3: Priority 65
Thread 1: Priority 65
Thread 2: Priority 65
Thread 0: Priority 65
Thread 4: Priority 65
Thread 2: Priority 64
Thread 1: Priority 64
Thread 0: Priority 64
Thread 4: Priority 64
Thread 3: Priority 64
Thread 4: Priority 63
Thread 3: Priority 63
Thread 2: Priority 63
Thread 1: Priority 63
Thread 0: Priority 63
Thread 3: Priority 62
Thread 1: Priority 62
Thread 2: Priority 62
Thread 0: Priority 62
Thread 4: Priority 62
Thread 1: Priority 61
Thread 4: Priority 61
Thread 0: Priority 61
Thread 3: Priority 61
Thread 2: Priority 61
Thread 1: Priority 60
Thread 3: Priority 60
Thread 2: Priority 60
Thread 4: Priority 60
Thread 0: Priority 60
Thread 2: Priority 59
Thread 3: Priority 59
Thread 1: Priority 59
Thread 4: Priority 59
Thread 0: Priority 59
Thread 0: Priority 58
Thread 1: Priority 58
Thread 3: Priority 58
Thread 2: Priority 58
Thread 4: Priority 58
Thread 3: Priority 57
Thread 4: Priority 57
Thread 1: Priority 57
Thread 2: Priority 57
Thread 0: Priority 57
Thread 2: Priority 56
Thread 0: Priority 56
Thread 1: Priority 56
Thread 3: Priority 56
Thread 4: Priority 56
Thread 4: Priority 55
Thread 1: Priority 55
Thread 3: Priority 55
Thread 0: Priority 55
Thread 2: Priority 55
Thread 0: Priority 54
Thread 3: Priority 54
Thread 2: Priority 54
Thread 4: Priority 54
Thread 1: Priority 54
Thread 2: Priority 53
Thread 1: Priority 53
Thread 0: Priority 53
Thread 4: Priority 53
Thread 3: Priority 53
Thread 3: Priority 52
Thread 2: Priority 52
Thread 4: Priority 52
Thread 1: Priority 52
Thread 0: Priority 52
Thread 2: Priority 51
Thread 3: Priority 51
Thread 0: Priority 51
Thread 1: Priority 51
Thread 4: Priority 51
Thread 3: Priority 50
Thread 0: Priority 50
Thread 4: Priority 50
Thread 2: Priority 50
Thread 1: Priority 50
Thread 1: Priority 49
Thread 2: Priority 49
Thread 3: Priority 49
Thread 0: Priority 49
Thread 4: Priority 49
Thread 1: Priority 48
Thread 0: Priority 48
Thread 4: Priority 48
Thread 2: Priority 48
Thread 3: Priority 48
Thread 4: Priority 47
Thread 2: Priority 47
Thread 0: Priority 47
Thread 3: Priority 47
Thread 1: Priority 47
Thread 2: Priority 46
Thread 0: Priority 46
Thread 4: Priority 46
Thread 1: Priority 46
Thread 3: Priority 46
Thread 3: Priority 45
Thread 2: Priority 45
Thread 4: Priority 45
Thread 0: Priority 45
Thread 1: Priority 45
Thread 4: Priority 44
Thread 1: Priority 44
Thread 0: Priority 44
Thread 3: Priority 44
Thread 2: Priority 44
Thread 2: Priority 43
Thread 0: Priority 43
Thread 4: Priority 43
Thread 3: Priority 43
Thread 1: Priority 43
Thread 0: Priority 42
Thread 2: Priority 42
Thread 4: Priority 42
Thread 3: Priority 42
Thread 1: Priority 42
Thread 0: Priority 41
Thread 4: Priority 41
Thread 3: Priority 41
Thread 2: Priority 41
Thread 1: Priority 41
Thread 2: Priority 40
Thread 3: Priority 40
Thread 1: Priority 40
Thread 4: Priority 40
Thread 0: Priority 40
Thread 4: Priority 39
Thread 0: Priority 39
Thread 2: Priority 39
Thread 1: Priority 39
Thread 3: Priority 39
Thread 4: Priority 38
Thread 0: Priority 38
Thread 2: Priority 38
Thread 1: Priority 38
Thread 3: Priority 38
Thread 0: Priority 37
Thread 3: Priority 37
Thread 4: Priority 37
Thread 1: Priority 37
Thread 2: Priority 37
Thread 2: Priority 36
Thread 1: Priority 36
Thread 0: Priority 36
Thread 3: Priority 36
Thread 4: Priority 36
Thread 4: Priority 35
Thread 1: Priority 35
Thread 0: Priority 35
Thread 2: Priority 35
Thread 3: Priority 35
Thread 4: Priority 34
Thread 0: Priority 34
Thread 2: Priority 34
Thread 3: Priority 34
Thread 1: Priority 34
Thread 0: Priority 33
Thread 4: Priority 33
Thread 3: Priority 33
Thread 2: Priority 33
Thread 1: Priority 33
Thread 1: Priority 32
Thread 4: Priority 32
Thread 0: Priority 32
Thread 2: Priority 32
Thread 3: Priority 32
Thread 4: Priority 31
Thread 1: Priority 31
Thread 0: Priority 31
Thread 2: Priority 31
Thread 3: Priority 31
Thread 1: Priority 30
Thread 4: Priority 30
Thread 3: Priority 30
Thread 0: Priority 30
Thread 2: Priority 30
Thread 4: Priority 29
Thread 3: Priority 29
Thread 0: Priority 29
Thread 1: Priority 29
Thread 2: Priority 29
Thread 4: Priority 28
Thread 0: Priority 28
Thread 1: Priority 28
Thread 2: Priority 28
Thread 3: Priority 28
Thread 0: Priority 27
Thread 2: Priority 27
Thread 3: Priority 27
Thread 1: Priority 27
Thread 4: Priority 27
Thread 4: Priority 26
Thread 1: Priority 26
Thread 2: Priority 26
Thread 3: Priority 26
Thread 0: Priority 26
Thread 3: Priority 25
Thread 4: Priority 25
Thread 0: Priority 25
Thread 1: Priority 25
Thread 2: Priority 25
Thread 0: Priority 24
Thread 4: Priority 24
Thread 3: Priority 24
Thread 2: Priority 24
Thread 1: Priority 24
Thread 2: Priority 23
Thread 1: Priority 23
Thread 4: Priority 23
Thread 3: Priority 23
Thread 0: Priority 23
Thread 3: Priority 22
Thread 4: Priority 22
Thread 2: Priority 22
Thread 0: Priority 22
Thread 1: Priority 22
Thread 2: Priority 21
Thread 0: Priority 21
Thread 4: Priority 21
Thread 3: Priority 21
Thread 1: Priority 21
Thread 4: Priority 20
Thread 0: Priority 20
Thread 3: Priority 20
Thread 2: Priority 20
Thread 1: Priority 20
Thread 0: Priority 19
Thread 1: Priority 19
Thread 4: Priority 19
Thread 2: Priority 19
Thread 3: Priority 19
Thread 0: Priority 18
Thread 4: Priority 18
Thread 2: Priority 18
Thread 1: Priority 18
Thread 3: Priority 18
Thread 3: Priority 17
Thread 2: Priority 17
Thread 4: Priority 17
Thread 1: Priority 17
Thread 0: Priority 17
Thread 2: Priority 16
Thread 4: Priority 16
Thread 0: Priority 16
Thread 3: Priority 16
Thread 1: Priority 16
Thread 3: Priority 15
Thread 2: Priority 15
Thread 1: Priority 15
Thread 4: Priority 15
Thread 0: Priority 15
Thread 1: Priority 14
Thread 2: Priority 14
Thread 4: Priority 14
Thread 0: Priority 14
Thread 3: Priority 14
Thread 2: Priority 13
Thread 1: Priority 13
Thread 3: Priority 13
Thread 4: Priority 13
Thread 0: Priority 13
Thread 0: Priority 12
Thread 2: Priority 12
Thread 3: Priority 12
Thread 4: Priority 12
Thread 1: Priority 12
Thread 3: Priority 11
Thread 0: Priority 11
Thread 1: Priority 11
Thread 2: Priority 11
Thread 4: Priority 11
Thread 1: Priority 10
Thread 0: Priority 10
Thread 4: Priority 10
Thread 3: Priority 10
Thread 2: Priority 10
Thread 0: Priority 9
Thread 3: Priority 9
Thread 1: Priority 9
Thread 2: Priority 9
Thread 4: Priority 9
Thread 3: Priority 8
Thread 4: Priority 8
Thread 1: Priority 8
Thread 2: Priority 8
Thread 0: Priority 8
Thread 0: Priority 7
Thread 3: Priority 7
Thread 4: Priority 7
Thread 1: Priority 7
Thread 2: Priority 7
Thread 2: Priority 6
Thread 3: Priority 6
Thread 4: Priority 6
Thread 0: Priority 6
Thread 1: Priority 6
Thread 1: Priority 5
Thread 0: Priority 5
Thread 4: Priority 5
Thread 3: Priority 5
Thread 2: Priority 5
Thread 4: Priority 4
Thread 2: Priority 4
Thread 3: Priority 4
Thread 0: Priority 4
Thread 1: Priority 4
Thread 1: Priority 3
Thread 4: Priority 3
Thread 0: Priority 3
Thread 2: Priority 3
Thread 3: Priority 3
Thread 3: Priority 2
Thread 4: Priority 2
Thread 1: Priority 2
Thread 2: Priority 2
Thread 0: Priority 2
Thread 3: Priority 1
Thread 1: Priority 1
Thread 4: Priority 1
Thread 0: Priority 1
Thread 2: Priority 1
Thread 1: Priority 0
Thread 0: Priority 0
Thread 3: Priority 0
Thread 4: Priority 0
Thread 2: Priority 0
Main: Queue Size: 0
Main: End of the program.
View Code

 4. 使用带有延迟元素的线程安全列表

  Java API提供了一种用于并发应用的有趣的数据结构,即DelayQueue类。这个类可以存放带有激活日期的元素。当调用方法从队列中返回或提取元素时,未来的元素日期将被忽略。这些元素对于这些方法是不可见的。

  为了具有调用行为,存放到DelayQueue类中的元素必须继承Delayed接口。Dealyed接口使对象成为延迟对象,它使存放在DealayQueue类中的对象具有了激活的日期,即到激活日期的时间。该接口强制执行下列两个方法。

  • compareTo(Delayed o):Delayed接口继承了Comparable接口,因此有了这个方法。如果当前对象的延迟值小于参数对象的值,将返回一个小于0的值;如果当前对象的延迟值大于参数对象的延迟值,将返回一个大于0的值;如果两者的延迟值相等则返回0。
  • getDelay(TimeUnit unit):这个方法返回到激活日期的剩余时间,单位由单位参数指定。

  本例中,将会学习使用DelayQueue类来存放具有不同激活日期的event。

1. 创建名为Event的类并实现Delayed接口。

import java.util.Date;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

public class Event implements Delayed{
    private Date startDate;
    
    public Event(Date startDate){
        this.startDate = startDate;
    }
    
    @Override
    public int compareTo(Delayed o) {
        long result = this.getDelay(TimeUnit.NANOSECONDS)-o.getDelay(TimeUnit.NANOSECONDS);
        if(result<0)
            return -1;
        if(result>0)
            return 1;
        return 0;
    }

    @Override
    public long getDelay(TimeUnit unit) {
        Date now = new Date();
        long diff = startDate.getTime()-now.getTime();
        return unit.convert(diff, TimeUnit.MILLISECONDS);
    }
    
    
}

2. 创建名为Task的类,并实现Runnable接口。

import java.util.Date;
import java.util.concurrent.DelayQueue;


public class Task implements Runnable {
    private int id;
    private DelayQueue<Event> queue;
    
    public Task(int id, DelayQueue<Event> queue){
        this.id = id;
        this.queue = queue;
    }
    
    @Override
    public void run() {
        Date now = new Date();
        Date delay = new Date();
        delay.setTime(now.getTime()+id*1000);
        System.out.printf("Thread %s: %s\n", id, delay);
        for(int i=0;i<100;i++){
            Event event = new Event(delay);
            queue.add(event);
        }
    }    
    
}

3. 创建范例的主类Main,并添加main()方法。

import java.util.Date;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) {
        DelayQueue<Event> queue = new DelayQueue<>();
        Thread threads[] = new Thread[5];
        for(int i=0;i<threads.length;i++){
            Task task = new Task(i+1, queue);
            threads[i] = new Thread(task);
        }
        for(int i=0;i<threads.length;i++){
            threads[i].start();
        }
        try {
            for(int i=0;i<threads.length;i++){
                threads[i].join();
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            while(queue.size()>0){
                int counter = 0;
                Event event;
                do{
                    event = queue.poll();
                    if(event!=null)
                        counter++;
                }while(event!=null);
                System.out.printf("At %s you have read %d events\n", new Date(),counter);
                Thread.sleep(500);
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Main: End.");
    }
}

4. 程序运行结果如下

Thread 5: Tue Oct 27 16:19:35 CST 2015
Thread 4: Tue Oct 27 16:19:34 CST 2015
Thread 2: Tue Oct 27 16:19:32 CST 2015
Thread 1: Tue Oct 27 16:19:31 CST 2015
Thread 3: Tue Oct 27 16:19:33 CST 2015
At Tue Oct 27 16:19:30 CST 2015 you have read 0 events
At Tue Oct 27 16:19:31 CST 2015 you have read 0 events
At Tue Oct 27 16:19:31 CST 2015 you have read 100 events
At Tue Oct 27 16:19:32 CST 2015 you have read 0 events
At Tue Oct 27 16:19:32 CST 2015 you have read 100 events
At Tue Oct 27 16:19:33 CST 2015 you have read 0 events
At Tue Oct 27 16:19:33 CST 2015 you have read 100 events
At Tue Oct 27 16:19:34 CST 2015 you have read 0 events
At Tue Oct 27 16:19:34 CST 2015 you have read 100 events
At Tue Oct 27 16:19:35 CST 2015 you have read 0 events
At Tue Oct 27 16:19:35 CST 2015 you have read 100 events
Main: End.
View Code

  DelayQueue类本身是使用纳秒工作的,但是对于使用者来说,是透明的。

  注:使用size()方法必须小心,它返回的是列表中元素的总数,包括活动和非活动的元素。

5. 使用线程安全可遍历映射

  Java API提供了一种用于并发应用的有趣的数据结构,即ConcurrentNavigableMap接口及其实现类。实现这个接口的类以如下两个部分存放元素:

  • 一个键值(Key),它是元素的标识并且是唯一的。
  • 元素其它部分数据。

  每一个组成部分都必须在不同的类中实现。

  Java API也提供了一个实现ConcurrentSkipListMap接口的类,ConcurrentSkipListMap接口实现了与ConcurrentNavigableMap接口有相同行为的一个非阻塞式列表。从内部实现机制来讲,它使用了一个Skip List来存放数据。Skip List是基于并发列表的数据结构,效率与二叉树相近。有了它,就有了一个数据结构,比如有序列表在添加、搜索或删除元素时耗费更少的访问时间。

  备注:Skip List由William Pugh在1990年引入,详见http://www.cs.umd.edu/~pugh/

  当你插入元素到映射中时,ConcurrentSkipListMap接口类使用键值来排序所有元素。除了提供返回一个具体元素的方法之外,这个类也提供获取子映射的方法。

  本节将要学习如何使用ConcurrentSkipListMap类实现对联系人对象的映射。

1. 创建名为Contact的类。

public class Contact {
    private String name;
    private String phone;
    
    public Contact(String name, String phone){
        this.name = name;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }
    
    
}

2. 创建名为Task的类,并实现Runnable接口。

import java.util.concurrent.ConcurrentSkipListMap;

public class Task implements Runnable {
    private String id;
    private ConcurrentSkipListMap<String, Contact> map;
    
    public Task(String id, ConcurrentSkipListMap<String, Contact> map){
        this.id = id;
        this.map = map;
    }
    
    @Override
    public void run() {
        for(int i=0;i<1000;i++){
            Contact contact = new Contact(id, String.valueOf(i+1000));
            map.put(id+contact.getPhone(), contact);
        }
    }    
    
}

3. 实现范例的主类Main,并添加main()方法。

import java.util.Map;
import java.util.concurrent.ConcurrentNavigableMap;
import java.util.concurrent.ConcurrentSkipListMap;

public class Main {

    public static void main(String[] args) {
        ConcurrentSkipListMap<String, Contact> map = new ConcurrentSkipListMap<>();
        Thread threads[] = new Thread[26];
        int counter = 0;
        for(char i='A';i<='Z';i++){
            Task task = new Task(String.valueOf(i), map);
            threads[counter] = new Thread(task);
            threads[counter].start();
            counter++;
        }
        try {
            for(int i=0;i<26;i++){
                threads[i].join();
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.printf("Main: Size of the map: %d\n", map.size());
        Map.Entry<String, Contact> element;
        Contact contact;
        //输出第一个实体
        element = map.firstEntry();
        contact = element.getValue();
        System.out.printf("Main: First Entry: %s: %s\n", contact.getName(), contact.getPhone());
        //输出最后一个实体
        element = map.lastEntry();
        contact = element.getValue();
        System.out.printf("Main: Last Entry: %s: %s\n", contact.getName(), contact.getPhone());
        //使用subMap()取得map的一个子映射,并输出到控制台。
        System.out.printf("Main: Submap from A1996 to B1002: \n");
        ConcurrentNavigableMap<String, Contact>  summap = map.subMap("A1996", "B1002");
        do{
            element = summap.pollFirstEntry();
            if(element!=null){
                contact = element.getValue();
                System.out.printf("%s: %s\n", contact.getName(), contact.getPhone());
            }
        }while(element!=null);
    }
}

4. 程序运行结果如下

Main: Size of the map: 26000
Main: First Entry: A: 1000
Main: Last Entry: Z: 1999
Main: Submap from A1996 to B1002: 
A: 1996
A: 1997
A: 1998
A: 1999
B: 1000
B: 1001

6. 生成并发随机数

  Java并发API提供了一个特殊的类用以在并发程序中生成伪随机数(Pseudo-Random Number),即Java 7新引入的ThreadLocalRandom类。它是线程本地变量。每个生成随机数的线程都有一个不同的生成器,但是都在同一类中被管理,对程序员来说是透明的。相比于使用共享的Random对象为所有线程生成随机数,这种机制具有更好的性能。

  下面我们将学习如何使用ThreadLocalRandom类在并发应用中生成随机数。

1. 创建名为TaskLocalRandom的类并实现Runnable接口。

import java.util.concurrent.ThreadLocalRandom;

public class TaskLocalRandom implements Runnable {
    
    //实现类构造器,使用current()方法为当前线程初始化随机数生成器
    public TaskLocalRandom(){
        ThreadLocalRandom.current();
    }
    
    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        for(int i=0;i<10;i++){
            System.out.printf("%s: %d\n", name, ThreadLocalRandom.current().nextInt(10));
        }        
    }
}

2. 创建本范例的主类Main,并实现main()方法。

public class Main {

    public static void main(String[] args) {
        Thread threads[] = new Thread[3];
        for(int i=0;i<3;i++){
            TaskLocalRandom task = new TaskLocalRandom();
            threads[i] = new Thread(task);
            threads[i].start();
        }
    }
}

3. 程序运行结果如下

Thread-0: 1
Thread-0: 4
Thread-0: 0
Thread-2: 6
Thread-2: 5
Thread-2: 3
Thread-2: 0
Thread-2: 3
Thread-2: 1
Thread-2: 0
Thread-2: 4
Thread-2: 4
Thread-2: 9
Thread-1: 8
Thread-0: 2
Thread-0: 8
Thread-0: 5
Thread-1: 7
Thread-1: 0
Thread-1: 8
Thread-1: 1
Thread-1: 0
Thread-1: 0
Thread-1: 8
Thread-1: 4
Thread-1: 3
Thread-0: 7
Thread-0: 7
Thread-0: 4
Thread-0: 9
View Code

 7. 使用原子变量

  原子变量(Atomic Variable)是从Java 5开始引入的,它提供了单个变量上的原子操作。在编译程序时,Java代码中的每个变量、每个操作都将被转换成机器可以理解的指令。例如,当给一个变量赋值时,在Java代码中只使用一个指令,但是编译这个程序时,指令被转换成JVM语言中的不同指令。当多个线程共享同一个变量时,就会发生数据不一致的错误。

  为了避免这类错误,Java引入了原子变量。当一个线程在对原子变量操作时,如果其他线程也试图对同一原子变量执行操作,原子变量的实现类提供了一套机制来检查操作是否在一步内完成。一般来说,这个操作先获取变量值,然后在本地改变变量的值,然后试图用这个改变的值去替换之前的值。如果之前的值没有被其他线程改变,就可以执行这个替换操作。否则,方法将再执行这个操作。这种操作称之为CAS原子操作(Compare and Set)。

  原子变量不使用锁或者其他同步机制来保护对其值的并发访问。所有操作都是基于CAS原子操作的。它保证了多线程在同一时间操作一个原子变量而不会产生数据不一致的错误,并且它的性能优于使用同步机制保护的普通变量。

  本节将要学习如何使用原子变量实现一个银行账号和两个不同的任务:一个加钱到账号上,另一个从账号上取钱。在例子的实现中使用了AtomicLong类。

1. 创建名为Account的类来模拟银行账户。

import java.util.concurrent.atomic.AtomicLong;

public class Account {
    //存放账户余额
    private AtomicLong balance;
    
    public Account(){
        balance = new AtomicLong();
    }

    public long getBalance() {
        return balance.get();
    }

    public void setBalance(long balance) {
        this.balance.set(balance);
    }
    //增加余额
    public void addAccount(long amount){
        this.balance.getAndAdd(amount);
    }
    //减少余额
    public void substractAmount(long amount){
        this.balance.getAndAdd(-amount);
    }
}

2. 创建一个名为Company的类并实现Runnable接口。这个类模拟公司的付款。

public class Company implements Runnable {
    private Account account;
    
    public Company(Account account){
        this.account = account;
    }
    
    @Override
    public void run() {
        for(int i=0;i<10;i++){
            account.addAccount(1000);
        }

    }

}

3. 创建名为Bank的类并实现Runnable接口。这个类模拟从账户中取钱。

public class Bank implements Runnable {
    private Account account;
    
    public Bank(Account account){
        this.account = account;
    }
    
    @Override
    public void run() {
        for(int i=0;i<10;i++){
            account.substractAmount(1000);
        }

    }

}

4. 创建名为Main的主类,并实现main()方法。

public class Main {

    public static void main(String[] args) {
        Account account = new Account();
        account.setBalance(1000);
        Company company = new Company(account);
        Thread companyThread = new Thread(company);
        Bank bank = new Bank(account);
        Thread bankThread = new Thread(bank);
        System.out.printf("Account : Initial Balance: %d\n", account.getBalance());
        companyThread.start();
        bankThread.start();
        //等待所有线程执行结束
        try {
            companyThread.join();
            bankThread.join();
            System.out.printf("Account : Final Balance: %d\n", account.getBalance());
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

5. 程序运行结果如下

Account : Initial Balance: 1000
Account : Final Balance: 1000

  Java还提供了其他的原子类,AtomicBoolean、AtomicInteger和AtomicReference是原子类的其他实现类。

8. 使用原子数组

  当发现一个并发应用时,将不可避免地会有多线程共享一个或者多个对象的现象,为了避免数据不一致错误,需要使用同步机制(如锁或synchronized关键字)来保护对这些共享属性的访问。但是,这些同步机制存在下列问题。

  • 死锁:一个线程被阻塞,并且试图获得的锁正被其他线程使用,但其他线程永远不会释放这个锁。这种情况使得应用不会继续执行,并且永远不会结束。
  • 即使只有一个线程访问共享对象,它仍然需要执行必须的代码来获取和释放锁。

  针对这种情况,为了提供更优的性能,Java于是引入了比较和交换操作(Compare-and-Swap Operation)。这个操作使用以下三步修改变量的值。

  1. 取得变量值,即变量的旧值。
  2. 在一个临时变量中修改变量值,即变量的新值。
  3. 如果上面获得的变量旧值与当前变量值相等,就用新值替换旧值。如果已有其他线程修改了这个变量的值,上面获得的变量的旧值就可能与当前变量值不同。

  采用比较和交换机制不需要使用同步机制,不仅可以避免死锁并且性能更好。

  Java在原子变量中实现了这种机制。这些变量提供了实现比较和交换操作的comparaAndSet()方法,其他方法也基于它展开。

  Java也引入了原子数组(Atomic Array)提供对integer或long数字数组的原子操作。本节将学习如何使用AtomicIntegerArray类的原子数组。

1. 创建名为Incrementer的类实现Runnable接口。

import java.util.concurrent.atomic.AtomicIntegerArray;


public class Incrementer implements Runnable {
    private AtomicIntegerArray vector;
    
    public Incrementer(AtomicIntegerArray vector){
        this.vector = vector;
    }
    
    @Override
    public void run() {
        for(int i=0;i<vector.length();i++){
            vector.getAndIncrement(i);
        }

    }

}

2. 创建名为Decrementer的类并实现Runnable接口。

import java.util.concurrent.atomic.AtomicIntegerArray;


public class Decrementer implements Runnable {
    private AtomicIntegerArray vector;
    
    public Decrementer(AtomicIntegerArray vector){
        this.vector = vector;
    }
    
    @Override
    public void run() {
        for(int i=0;i<vector.length();i++){
            this.vector.getAndDecrement(i);
        }

    }

}

3. 创建范例的主类Main,并实现main()方法。

import java.util.concurrent.atomic.AtomicIntegerArray;

public class Main {

    public static void main(String[] args) {
        //创建有1000个元素的原子数组
        final int THREADS = 1000;
        AtomicIntegerArray vector = new AtomicIntegerArray(THREADS);
        Incrementer incrementer = new Incrementer(vector);
        Decrementer decrementer = new Decrementer(vector);
        Thread threadIncrementer[] = new Thread[THREADS];
        Thread threadDecrementer[] = new Thread[THREADS];
        for(int i=0;i<THREADS;i++){
            threadIncrementer[i] = new Thread(incrementer);
            threadDecrementer[i] = new Thread(decrementer);
            threadIncrementer[i].start();
            threadDecrementer[i].start();
        }
        try {
            for(int i=0;i<THREADS;i++){
                threadIncrementer[i].join();
                threadDecrementer[i].join();
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for(int i=0;i<vector.length();i++){
            if(vector.get(i)!=0)
                System.out.printf("Vector[%d] : %d\n", i, vector.get(i));
        }
        System.out.println("Main: End of the example");
    }
}

4. 程序运行结果如下

Main: End of the example

  Java还提供了另一个原子数组类,即AtomicLongArray类,它的方法与AtomicIntegeArray类相同。

  这些原子数组还提供了其他方法。

  • get(int i):返回数组中由参数指定位置的值。
  • set(int i, int newValue):设置由参数指定位置的新值。
posted @ 2015-10-27 11:31  ~风轻云淡~  阅读(464)  评论(1编辑  收藏  举报