Java多进程简介和java实现多线程

    技术2022-07-12  106

    多进程概念

    当前的操作系统都是多任务OS每个独立执行的任务就是一个进程OS将时间划分为多个时间片(时间很短)每个时间片内将CPU分配给某一任务,时间片结束,CPU自动回收,再分配给另外任务。从外部看,所有任务都是同时在执行,但在CPU上,任务是按照串行依次运行(单核CPU)。如果能多核,多个进程任务可以并行。但是在单核上,多进程只能串行执行。

    多进程优点

    可以同时运行多个任务程序因IO阻塞时,可以释放CPU,让CPU为其他程序服务当系统有多个CPU时,可以为多个程序同时服务 – 现在CPU不在是提高频率,可是增加核数 – 多核和并行程序才是提高程序性能的唯一办法

    多进程缺点

    太笨重,不好管理不好切换,重新去其他进程,需要加载

    多线程概念

    一个程序可以包括多个子任务,可串,可并每个子任务可以称为一个线程如果一个子任务阻塞,程序可以将CPU调度到另外一个子任务进行工作。这样CPU还是保留在本程序中,而不是被调度到别的进程去。这样,提高了本程序所获得的CPU时间和利用率

    多线程优点

    线程共享数据线程通讯更加高效线程更加轻量级,更容易切换多个线程更容易管理

    JAVA多线程实现

    java.lang.Thread – 线程继承Thread类,实现run方法java.lang.Runnable接口(Java四大接口之一) – 线程实现Runnable接口,实现run方法

    多线程启动

    start方法,会自动以新进程调用run方法(底层使用JNI实现)直接调用run方法,将会变成串行执行同一个线程,多次start会报错,只执行第一次start方法多个线程启动,其启动顺序先后是随机的,完全由系统来主导线程无需关闭,只要其run方法执行结束,自动关闭main函数(线程)可能早于新线程结束,整个程序并不终止整个程序终止是等所有的线程都终止(包括main函数线程)

    Thread类实现多线程

    public class Thread1 extends Thread{ public void run() { System.out.println("hello"); } public static void main(String[] a) { new Thread1().start(); } }

    Runnable接口实现多线程

    实现Runnable的对象必须包装在Thread类里面,才可以启动

    public class Thread2 implements Runnable{ public void run() { System.out.println("hello"); } public static void main(String[] a) { new Thread(new Thread2()).start(); } } public class ThreadDemo3 { public static void main(String args[]) { //new TestThread3().start(); //Runnable对象必须放在一个Thread类中才能运行 TestThread3 tt= new TestThread3();//创建TestThread类的一个实例 Thread t= new Thread(tt);//创建一个Thread类的实例 t.start();//使线程进入Runnable状态 while(true) { System.out.println("main thread is running"); try { Thread.sleep(1000); //1000毫秒 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class TestThread3 implements Runnable //extends Thread { //线程的代码段,当执行start()时,线程从此出开始执行 public void run() { while(true) { System.out.println(Thread.currentThread().getName() + " is running"); //返回当前线程的名字,系统自动派发 try { Thread.sleep(1000); //1000毫秒 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

    JAVA创建多线程方法对比

    Thread占据了父类的名额,线程方法只能继承了Thread这一个类,不如Runnable方便Thread类实现RunnableRunnable启动时需要Thread类的支持Runnable更容易实现多线程中资源共享建议Runnable接口 实现多线程
    Processed: 0.011, SQL: 9