当前位置: 首页 > 后端技术 > Java

多线程编程

时间:2023-04-02 00:53:24 Java

Java多线程编程Java为多线程编程提供内置支持。线程是指进程中的单个顺序控制流。多个线程可以在一个进程中并发运行,每个线程并行执行不同的任务。多线程是多任务处理的一种特殊形式,但多线程使用的资源开销较小。这里定义了另一个与线程相关的术语——进程:进程包括操作系统分配的内存空间,包含一个或多个线程。线程不能独立存在,它必须是进程的一部分。一个进程一直运行到所有非守护线程都运行完为止。多线程可以满足程序员编写高效的程序来充分利用CPU。线程优先级每个Java线程都有一个优先级,帮助操作系统决定线程的调度顺序。Java线程的优先级是一个整数,范围从1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY)。默认情况下,每个线程都分配有NORM_PRIORITY(5)优先级。优先级较高的线程对程序更重要,应在优先级较低的线程之前分配处理器资源。但是,线程优先级并不能保证线程执行的顺序,并且非常依赖于平台。创建线程Java提供了三种创建线程的方法:通过实现Runnable接口;通过继承Thread类本身;通过Callable和Future创建线程。通过实现Runnable接口创建线程要创建线程,最简单的方法是创建一个实现Runnable接口的类。为了实现Runnable,一个类只需要执行一个叫run()的方法,声明如下:publicvoidrun()你可以覆盖这个方法,重要的是要明白run()可以调用其他方法,使用其他类,并声明变量,就像主线程一样。创建一个实现了Runnable接口的类后,就可以在该类中实例化一个线程对象。Thread定义了几种构造方法,下面是我们经常用到的:Thread(RunnablethreadOb,StringthreadName);这里,threadOb是一个实现了Runnable接口的类的实例,threadName指定了新线程的名称。新线程创建后,只有调用它的start()方法才会运行。无效开始();下面是一个创建线程并开始执行的例子:instanceclassRunnableDemoimplementsRunnable{privateThreadt;privateStringthreadName;RunnableDemo(Stringname){threadName=name;System.out.println("Creating"+threadName);}publicvoidrun(){System.out.println("Running"+threadName);try{for(inti=4;i>0;i--){System.out.println("线程:"+threadName+","+i);//让线程睡一会儿Thread.sleep(50);}}catch(InterruptedExceptione){System.out.println("Thread"+threadName+"interrupted.");}System.out.println("Thread"+threadName+"exiting.");}publicvoidstart(){System.out.println("Starting"+threadName);if(t==null){t=newThread(this,threadName);t.start();}}}publicclassTestThread{publicstaticvoidmain(Stringargs[]){RunnableDemoR1=newRunnableDemo("Thread-1");R1.start();RunnableDemoR2=newRunnableDemo("Thread-2");R2.start();}}编译以上程序,运行结果如下:CreatingThread-1StartingThread-1创建线程-2起始线程-2运行线程-1线程:线程1,4运行线程-2线程:线程2,4线程:线程1,3线程:线程2,3线程:线程1,2线程:线程2,2线程:Thread-1,1Thread:Thread-2,1ThreadThread-1exiting.ThreadThread-2exiting.继承Thread创建线程第二种创建线程的方式是新建一个继承Thread类的类,然后创建一个类的实例继承类必须重写run()方法,该方法是新线程的入口,它还必须调用start()方法来执行,虽然这个方法被列为多线程实现,但它是本质上是一个实现Runnable接口的一个实例。实例classThreadDemoextendsThread{privateThreadt;privateStringthreadName;ThreadDemo(Stringname){threadName=name;System.out.println("Creating"+threadName);}publicvoidrun(){System.out.println("Running"+threadName);try{for(inti=4;i>0;i--){System.out.println("线程:"+threadName+","+i);//让线程睡一会Thread.sleep(50);}}catch(InterruptedExceptione){System.out.println("Thread"+threadName+"interrupted.");}System.out.println("Thread"+threadName+"exiting.");}publicvoidstart(){System.out.println("Starting"+threadName);if(t==null){t=newThread(this,threadName);t.start();}}}publicclassTestThread{publicstaticvoidmain(Stringargs[]){ThreadDemoT1=newThreadDemo("Thread-1");T1.开始();线程演示T2=newThreadDemo("线程2");T2.start();}}编写以上程序运行结果如下:CreatingThread-1StartingThread-1CreatingThread-2StartingThread-2RunningThread-1Thread:Thread-1,4RunningThread-2Thread:Thread-2,4Thread:Thread-1,3Thread:Thread-2,3Thread:Thread-1,2Thread:Thread-2,2Thread:Thread-1,1Thread:Thread-2,1ThreadThread-1exiting.ThreadThread-2退出。