本帖最后由 李志广 于 2012-8-9 18:56 编辑
创建线程的第一种方式:继承Thread类 1 步骤: 定义类继承Thread 复写Thread类中的run方法 调用线程的start方法 该方法两个作用:启动线程,调用run方法 第二种方式:实现Runable接口 1. 步骤: 定义类实现Runnable接口 覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中 通过Thread类建立线程对象 将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数 调用Thread类的start方法开启线程并调用Runnable接口子类的run方法 实现方式和继承方式的区别 实现方式好处:避免了单继承的局限性。 在定义线程时,建立使用实现方式。 两种方式区别: 继承Thread:线程代码存放Thread子类run方法中。 实现Runnable,线程代码存在接口的子类的run方法。
同步有两种表现形式:
一种就是同步代码块。同步代码块中的锁可以是任意的对象,用Object obj = new Object();可以作为同步代码块中的锁。
synchronized(对象) //对象可以使任意的对象。 { 需要被同步的语句。 }
另一种就是同步函数。就是在函数中加入同步代码块的关键字synchronized,这样就能使该函数变为同步函数。 函数肯定被对象调用,代表调用函数对象的引用就是this,也就是说同步函数使用的锁是this。 同步函数和同步代码块有什么区别呢? 1、同步函数比同步代码块写法简单 2、同步函数使用的锁是this,同步代码块使用的锁是任意指定的对象 建议开发时,使用同步代码块,尤其是需要不同锁时 以上是JDK1.5之前使用同步代码块和同步函数来解决多线程中的安全性问题
但在JDK1.5中,JDK出现了新的借口和类那就是Lock和Condition
Lock:比同步函数和同步代码块要好原来在同步中,锁和监视器是同一个对象(在同步里) 现在,升级后,锁是一个单独的对象。而且将监视器的方法也单独封装到了一个对象中, 这个对象就是升级后的Condition 升级后,都进行了单独的封装,锁被封装成了Lock对象,监视器方法被封装到了 Condition对象(监视器)中 Lock替代了同步,Condition代替了Objcet中的监视器方法 Condition中提供了监视器的方法:await().singal().signalAl()
以上就是在看完毕老师视频是的一些总结,希望对你有所帮助!!!{:soso_e100:} |