首先介绍下并发编程的三种基本特性:原子性:线程内部不可分割,整个线程里面的操作要么不执行,要么全部执行。
可见性:一个线程修个了某个值,其他线程要捕获整个变化并引用新值。
有序性:所有线程按照代码顺序执行
JVM的最小执行单位为线程,线程的执行状态有4种:就绪、运行、挂起、死亡。
1.常用的线程创建方法有两种: ①继承Thread类并且重写run()方法。
②实现Runnable接口并且实现run()方法。
两种线程的创建方式都非常简单,这里就不附上源码了,简单对两种方法进行一个比较,第一种方法和第二种方法都必须重新写run()方法,并通过start方法调用使线程处于就绪状态等待CPU调度,不同的是前一种方法采用的是继承父类,后者是实现接口,由于java具有单继承性(即只能继承一个类),并且一般来说继承多用于进行类的强化,所以首选创建线程的方法应该为第二种,也就是实现Runnable接口并且实现run()方法。
2.java可通过volatile来保证线程的可见性,但是不能保证线程的原子性,synchronize可让线程排队执行,既保证了线程的可见性,也保证的线程的原子性,但是执行效率会因此降低。
其他关于线程的知识请自行百度或者查阅资料,这里只是对并发编程做一个简单的概括