java多线程基本知识

来源:互联网 发布:外贸企业数据 编辑:程序博客网 时间:2024/06/04 17:55

1.java中想实现并发的对象需要实现java.lang.Runnable接口,实现其中的run方法。

2.可以用new Thread(new 并发类()).start(); 用Thread类来实现并发,java.lang.Thread类也实现了Runnable接口,在run方法中调用了一些native的方法。

3.在Java SE5/6以后,可以用ExecutorService来操作线程,比较方便,可以创建不同种类的线程池。

创建大小可变(需要多少有多少)的线程池:ExecutorService executorService = Executors.newCachedThreadPool();

创建固定大小的线程池:ExecutorService executorService = Executors.newFixedThreadPool(2);

创建单一的Executor:ExecutorService executorService = Executors.newSingleThreadExecutor();

然后调用executorService.execute(new 并发类());就可以实现并发了

最后调用executorService.shutdown()关闭服务。

可以给newCachedThreadPool()传入一个实现了ThreadFactory接口的对象,按照需求创建线程。

4.用Thead.sleep()方法使线程休眠,默认是毫秒单位,Java SE5/6之后可以使用TimeUnit.MILLISECONDS.sleep(100);来显示的指定单位,更容易理解。

5.如果一个需要知道一个线程执行完的返回值,则需要将java.lang.Runnable改成java.util.concurrent.Callable<>,用泛型声明返回类型,然后调用executorService.submit()方法就可以获得返回值了。

6.为了保护线程安全,防止资源冲突,在并发有可能同时执行同一方法时,需要给方法加上synchronized关键字,这样java就能在这个方法被调用的时候自动给方法加上锁,防止同时被调用。

7.java中将读或写32位以下(除long double(64)之外的所有基本类型)的操作称为原子操作,保证操作是不可分离的。

但是注意i++并不是原子操作,分三步进行,取,加,存