java多线程

进程是程序的一种动态形式,是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(){……}

});

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值