java中main为主线程,也可以增加线程。如果程序中有多个线程。
1、这些线程是怎样调用执行的呢?
2、几个线程顺序是怎样的,与什么有关?(我们可以通过方法设置线程的优先级,顺序和优先级有关吗?)
3、先运行谁,后运行谁?又取决于什么?

解决方案 »

  1.   

    new Thread 然后 strat下来就是看CPU执行时间 随机分配~~你写个例子 打印输出 看下就知道了 多跑几次 结果都不一样
      

  2.   

    现在的双核cpu是怎么回事呢?同一个时间点能否运行两个或多个线程?
      

  3.   

    双核就是两个处理器,每个处理器单位时间内只能执行一个线程,但是多线程情况下,cpu调度的速度非常快,感觉就像同时执行多个线程一样。实际上是一次执行一个。而每个线程,不管你优先级有多高都是一种"抢占"的方式。不能确定cpu下一次一定执行哪一个线程。
      

  4.   


    线程是需要得到处理器分给的时间片才能执行的,线程执行是没有确定顺序的,优先级及一些方法也只是改变执行的几率而已。先运行谁、后运行谁没有确定的顺序。不同的环境(比如不同的操作系统)调度方式都不同,所以不能确定。传统的单核cpu在一个时间点上只能运行一个线程,而双核理论上可以同时运行两个线程。
      

  5.   


    package thread;public class ProducerAndCustomerDemo {
    public static void main(String[] args) {
    Queue q=new Queue();
    Productor p=new Productor(q);
    Customer c=new Customer(q);
    p.start();
    c.start();
    }
    }
    class Customer extends Thread{
    Queue q;
    public Customer(Queue q) {
    // TODO Auto-generated constructor stub
    this.q=q;
    }
    @Override
    public void run() {
    // TODO Auto-generated method stub
    while (q.value<10) {
    System.out.println("Customer get "+q.get());
    }
    }
    }
    class Productor extends Thread{
    Queue q;
    public Productor(Queue q) {
    // TODO Auto-generated constructor stub
    this.q=q;
    }
    @Override
    public void run() {
    // TODO Auto-generated method stub
    for (int i = 1; i <=10; i++) {
    q.put(i);
    System.out.println("Productor put "+i);
    }
    }
    }
    class Queue{
    int value;
    boolean bFull=false;
    public synchronized void  put(int i){
    if (!bFull) {
    value=i;
    bFull=true;
    //notify();
    notifyAll();
    try {
    wait();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    public synchronized int get(){
    if (!bFull) {
    try {
    wait();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    bFull=false;
    notifyAll();
    return value;
    }
    }
      

  6.   

    如果是双核CPU的话 那么就真正的实现了多线程。一般在JAVA里就是 new 一个Thread对象,然后start就可以开启这一线程了,至于执行的先后顺序,不确定,即便是设置了优先级也不能确定执行的顺序,优先级高的只能说被执行的几率比较大一点而已,所以宏观上看貌似优先级高的总是先被执行的。
      

  7.   

    线程的执行和顺序等问题是操作系统负责的,java不管。
      

  8.   

    四楼和三楼说的不一样,三楼说的是双核CPU在同一时间点也只能执行一个线程,只是时间很快。而四楼说在同一时间点可以执行两个线程。那什么说法正确呢?请高手解答!
      

  9.   

    每个CPU可以执行一个单独的线程。具体情况要看os如何调度了
      

  10.   

    针对9楼的问题
    单核处理器实际上采用了超线程技术,理论上就像多线程一样,并行运作,实际上,只是在一个CPU里面多加了一个逻辑处理单元,但是整数运算单元,浮点运算单元,二级缓存都是共享的,所以一旦两个线程遇到一个资源的时候就必须停止其中一个,等待另外一个执行完才可以继续执行。也就是说单核CPU没有做到资源的共享。
    但是双核处理器就不一样了,每个核心都有自己独立的指令集,执行单元,所以实实在在的实现了两个线程并行工作。举个例子吧,单核CPU就像一个人有一个大脑两个小脑,而双核CPU就是一个人有两个大脑
      

  11.   

    一个CPU同一时间点只能执行一个线程。
    由于有两个CPU,故可同时执行两个线程。具体的调度是OS设定的可以保证程序的正常。
      

  12.   

    至于线程执行的先后,操作系统有一定的调度原则,我记得大二期末时我们还考了这道题,不过很基础,现在的CPU不知道是不是这样的策略
    FIFO 先入先出原则.首先请求服务的对象首先得到CPU的处理.
    最短作业优先原则:需要最小时间的服务首先得到处理.
    最高优先级原则:优先级最高的服务首先得到处理.
    时间轮片原则: 每个任务分配一个系统时间片.轮流执行.
    最短剩余时间优先原则.