Java中如何创建多线程::
1 继承thread类
2重写run方法
3创建子类对象就是创建线程对象
4调用start方法使该线程开始执行;Java 虚拟机调用该线程的 run 方法
继承thread类,因为Thread类描述线程事物,具备线程该有的功能。
那为什么不直接创建thread对象呢??
Thread t1=new Thread();
T1.start();但是该start调用时thread类中的run方法
而这个run方法并没有做什么事情,更重要的是这个run方法并没有定义我们需要让线程执行的代码。
创建线程的目的是什么?是为了建立单独执行的路径,让多部分代码实现同时执行
也就是说线程创建并执行需要给定的代码(线程的任务)
创建线程的第二种方式:
1必须实现Runnable接口。
2覆盖run方法:
第二种方式实现Runnable接口避免了单继承的局限性,所以较为常用。
new Thread(d2).start()查询源代码可得:调用的是自己的run方法。
实现Runnable接口的方式更加符合面向对象,线程分为2部分,一部分线程对象,一部分线程任务。
继承Thread类,线程对象和线程任务耦合在一起,一点那创建thread类的子类对象既有线程对象又有线程任务。
多线程的安全性问题::
安全性问题的原因:1多个线程操作共性的数据;
2线程任务操作共享数据的代码有多条(运算有多个)
如何解决线程安全问题呢??
只要让一个线程在执行线程任务时将多条操作的共享数据的代码执行完,在执行过程中,不要让其他的线程执行。
Java中解决此问题的办法是通过代码块来完成,此代码块用关键字Synchronized(对象){
}
同步代码块的好处::
解决了多线程安全性的问题。