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

浙公网安备 33010602011771号