西安的网站设计单位,商务网站要怎么设计,长春市做网站,重庆市招投标信息网【第一章】Java多线程编程一.进程与线程多个时间段会有多个程序依次执行#xff0c;但是同一时间点只有一个进程执行线程是在进程基础之上划分的更小的程序单元 #xff0c;线程是在进程基础上创建并且使用的#xff0c;所以线程依赖于进程的支持#xff0c;但是来讲#…【第一章】Java多线程编程一.进程与线程多个时间段会有多个程序依次执行但是同一时间点只有一个进程执行线程是在进程基础之上划分的更小的程序单元 线程是在进程基础上创建并且使用的所以线程依赖于进程的支持但是来讲线程的启动速度要比进程快许多所以使用多线程进行并发处理的时候执行的性能要高于进程。二.Thread类实现多线程如果想要在JAVA中实现多进程就必须有一个专门的线程类进行线程执行任务的定义而这个主体类的定义是有要求的必须实现特定的接口或者继承特定的父类才可以完成。1.继承Thread类实现多线程java里面提供有一个java.lang.Thread的一个程序类一个类只要继承了此类并且覆写了Thread类中提供的run()方法就表示这个类是线程的主体类而这个方法就是线程的主方法。范例多线程主体类class Mythread extends Thread{ //线程主体类privateString title;publicMythread(String title) {this.title title;}Overridepublic void run() { //线程主体方法for (int x 0; x10;x) {System.out.println(this.title 运行 x x);}}}多线程要执行的功能都应该在run()方法中定义。需要说明的是run方法不能够被直接调用因为这里面牵扯到一个操作系统的资源调度问题所以要想启动多线程必须使用start方法。new Mythread(线程A).start();new Mythread(线程B).start();new Mythread(线程C).start();在java程序执行的过程之中考虑到对于不同层次开发者的需求所以支持有本地的操作系统函数调用这个技术被称为JNI(Java Native Interface Java本地接口)技术而java中不推荐这样使用。而在Thread类里提供的start0()就表示需要将此方法依赖于不同的操作系统实现。public synchronized voidstart() {if (threadStatus ! 0)throw newIllegalThreadStateException();group.add(this);boolean started false;try{start0();started true;}finally{try{if (!started) {group.threadStartFailed(this);}}catch(Throwable ignore) {}}}private native void start0();疑问:为什么必须使用start而不能使用run方法任何情况下只要定义了多线程多线程的启动永远只有一种方案Thread类中的start方法。三.Runnable接口实现多线程虽然可以通过Thread类的继承来实现多线程的定义但是在java程序中对于继承永远都是存在有单继承局限的所以在java又提供了第二种多线程的主体定义形式实现java.lang.Runnable此接口定义如下FunctionalInterfacepublic voidRunnable() {public voidrun();}范例通过Runnable实现多线程(Thread(Runnable target))class Mythread implements Runnable{ //线程主体类privateString title;publicMythread(String title) {this.title title;}Overridepublic void run() { //线程主体方法for (int x 0; x10;x) {System.out.println(this.title 运行 x x);}}}public classThreadDemo {public static voidmain(String[] args) {Thread threada new Thread(new Mythread(线程对象A));Thread threadb new Thread(new Mythread(线程对象B));Thread threadc new Thread(new Mythread(线程对象C));threada.start();threadb.start();threadc.start();}由于此时只是实现了Runnable接口对象此时线程主体就不再有单继承的局限这样的设计才是标准的设计。Runnable接口使用了函数式接口的定义所以也可以直接使用Lambda表达式进行线程类实现。范例利用Lambda实现多线程定义public classThreadDemo {public static voidmain(String[] args) {for(int x 0 ;x 3 ; x) {String title 线程对象- x;Runnable run ()-{for(int y 0; y 3 ; y) {System.out.println(title 运行 x x);}};newThread(run).start();}}}在以后开发之中对于对线程的实现优先考虑的就是Runnable接口实现并且都是通过Thread启动多线程