java多线程

                                           Java多线程

  一: java给多线程编程提供了内置支持,一条线程指的是进程中的一个单一顺序的控制流,一个进程中可以多并发多个进程,每条线程并执行不同的任务。

 二:多线程是多任务的一种特别形式,但多线程使用了更小的资源开销。

三:进程包括由操作系统分配的内存空间,包含一个或多个线程,一个线程不能独立存在,它必须是进程的一部分,一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。多线程能满足程序猿编写高效率的程序来达到充分利用CPU目的。

四:一个线程的生命周期       

         新建---->就绪---->运行---->阻塞---->死亡   

      1、新建;使用ne关键字时线程被新建。

      2、就绪:调用start()方法后,这时候线程处于等待相当于生活当中的排队,等待JVM调度器调度。

      3、运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,执行run方法。

      4、阻塞:如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法后,失去了所有占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或者重新获得资源后可以重新进入就绪状态。

      5、死亡: 一个运行状态的线程完成任务或者其他终止条件时,该线程就切换到终止状态。

 

五:线程的优先级

           等级:

                MAX_PRIORITY:10
                MIN_PRIORITY:1
                NORM_PRIORITY:5

        每一个线程都有优先级,这样有助于系统能够确定线程的调度顺序,并不是胡乱调度运行,谁高等谁先运行。具有较高优先级的线程对程序更重要,并且应该在低优先级的线程之前分配处理器资源。但是,线程优先级不能保证线程执行的顺序,而且非常依赖于平台。

 

六:线程的实现   1、继承Thread类   2、实现Runable接口

      一:

package com.ThreadDemoThread;

/**
 * Thread
 */

class ThreadDemo extends Thread {
    private String name;

    public ThreadDemo(String name) {
        this.name = name;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(name + "运行 : " + i);

        }

    }

}


public class ThreadTest {
    public static void main(String[] args) {
        ThreadDemo threadDemo1 = new ThreadDemo("A");
        ThreadDemo threadDemo2 = new ThreadDemo("B");
        threadDemo1.start();
        threadDemo2.start();
    }
}

 

二、Runable

package com.ThreadDemoThread;
public class RunableTest {
    public static void main(String[] args) {
        RunableDemo w = new RunableDemo();

        //虽然有三个线程,但是只有一个窗口类实现的Runnable方法,由于三个线程共用一个window对象,所以自动共用100张票

        Thread t1=new Thread(w);
        Thread t2=new Thread(w);
        Thread t3=new Thread(w);

        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");

        t1.start();
        t2.start();
        t3.start();
    }
}
class RunableDemo implements Runnable{
    private int ticket = 100;
    @Override
    public void run() {
        while(true){
            if(ticket>0){
                //                try {
                //                    sleep(100);
                //                } catch (InterruptedException e) {
                //                    e.printStackTrace();
                //                }
                System.out.println(Thread.currentThread().getName()+"当前售出第"+ticket+"张票");
                ticket--;
            }else{
                break;
            }
        }
    }
}

 

            

        

$ javac GreetingServer.java
posted @ 2021-07-30 16:14  独特风格的码农  阅读(37)  评论(0)    收藏  举报