java多线程

    技术2024-08-16  66

    进程是程序的一种动态形式,是CPU、内存等资源占用的基本单位。每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。线程的划分尺度小于进程,它隶属于某个进程,不能独立占有这些资源。

    多线程机制,允许在程序中并发执行多个指令流,每个指令流都称为一个线程。一个进程中的线程间相互独立,共用一块内存区域,容易共享数据、进行通信。

     

    java中实现线程类,有两种方法:

    (1)实现java.lang.Runnable接口

    class TestRunnable implements Runnable{

         public void run(){

             ……     

        }

    }

    Thread t1 = new Thread(TestRunnable());

    t1.start();

    (2)继承自java.lang.Thread类

    class TestThread extends Thread{

         public void run(){

              ……

         }

    }

    TestThread t2 = new TestThread();

    t2.start();

     

    由于java类不能多继承,当线程类继承了Thread类后,就不能再继承其它的类。而实现Runnable接口,就不会有这样的问题;

    Thread提供了很多关于线程的方法,例如获取线程id、线程名、线程状态等方法,比Runnable使用起来更方便;

    实现Runnable接口的线程类的多个线程,可以更方便的访问同一变量,而Thread类则需要内部类来进行替代。

     

    使用synchronized让线程同步

    (1)同步代码块,在一个对象上加锁

    public void int num;

    public Object obj = new Object();

    ……

    public void  run(){

      synchronized(obj){

         for(int i =0;i < 100;i++){

                System.out.println("index = " + index++);

         }

     }

    }

     

    (2)同步方法

    public  synchronized void testMethod(){

      ……

    }

     

    Java线程池

    线程池属于对象池,是一个或多个线程的集合,可以最大限度地复用线程。

    java使用java.util.concurrent.ThreadPoolExecutor类来使用线程池,通过它构造的对象,可以很容易地管理线程。将线程代码与业务代码相分离,提高了线程的执行效率。

     

    ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)

     

    ThreadPoolExecutor pool= new ThreadPoolExecutor(1,1,0,TimeUnit.SECONDS,

    new ArrayBlockingQueue(5),

    new ThreadPoolExecutor.DiscardOldestPolicy());

     

    pool.execute(new Runnable(){

    public void run(){……}

    });

     

     

    最新回复(0)