A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多线程有几种实现方法?同步有几种实现方法?

6 个回复

倒序浏览
1 继承Thread,复写run方法。
2 实现Runnable接口,复写run方法,然后将对象传递到Thread中。
3 通过线程并发库(我知道有这样的实现方式,但具体的原理不太清楚)。

同步方式:
1 使用同步代码块。
2 使用同步方法。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
线程有两种启动方式1.定义实现java.lang.RunnableJ接口的类,定义好这个类之后,需要把它的实例作为参数传入Thread的构造方法中来创建出一个新线程。Thread thread = new Thread(new MyRunnable); 2.将类定义为Thread类的子类并重写run()方法。 Thread thread = new MyThread();
实现同步的方法1.synchronized放在方法声明中,表示整个方法为同步方法。如:public synchronized boolean sell(){...}
2.利用对象锁也可以实现同步  ->创建Lock实例private Lock lock = new ReentrantLock();  ->获取锁 lock.lock(); ->释放锁 lock.unlock();
具体的用法可参见张老师编写的 《Java基础与案例开发详解》->多线程部分


评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 不错。

查看全部评分

回复 使用道具 举报
推荐看下毕老师的线程视频,或张老师的基础视频里的多线程,,这些讲的是jdk5以前的
然后看下 张老师的  java5的线程 并发库,,
回复 使用道具 举报
关于线程的编写:
Java工程师为方便多线程开发,给我们提供了一个内部本身实现Runnable接口的类:Thread类。我们直接继承这个Thread类,然后把我们需要多线程并发执行的代码重写在这个Thread类的run方法里面,然后再依次调用这个Thread子类的构造器来创建线程,线程启动方法start()启动线程到运行状态,就可以了。。
这个是Java中多线程的第一种编写方式,但是在现实当中,用的比较少。主要原因在于这种方式有局限性。你一旦使用了这种方式去实现多线程,那么,就意味着你的程序是单继承的,你才可以这么做。比如你要定义一个学生类class Student让它继承Thread,并把要执行的多线程代码放在了子类重写Thread类的run方法里面。这样建立了一个线程以后,你的这个程序,如果以后或者现在想要扩展继承性,就不具备能力了。比如,你已经将学生类class Student继承自Thread实现了一个线程执行路径,某一天,你突然想从学生类class Student里面提炼出来一个class Person,你想再去继承它,要实现这种关系,那就是不可能的了,因为你使用了继承方式实现的线程编写,而且Java是仅仅支持单继承的。

Sun公司的天才们在开发Java时候,就发现了一个这样子的问题。于是,他们就提供了第二种线程编写的方式:实现Runnable接口方式。
这种方式,好处就在于弥补了上面第一种线程创建方式的缺点,实现Runnable接口,重写接口run方法允许你执行自己的线程代码,
同时实现Runnable接口的类允许你继承另外一个类,弥补了继承Thread方式中java单继承特性引发的缺点。
其内部实现机制就是:利用多态特性,定义Thread类时,为Thread类的构造函数重载了一个方法,这个方法接受一个Runable target参数。
这个地方,可以传入任何实现了Runnable接口的子类对象。而这个Runnable子类是不影响继承性的。
总结一下,Java中线程编写方式就是两种:
1.继承Thread方式。(简单点,就是继承方式)
2.实现Runnable接口方式(简单点,就是实现方式)

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 详细。

查看全部评分

回复 使用道具 举报
从线程有两种方法,一种是继承Thread,另一种是实现Runnable接口.同步方式也有两种,使用同步代码块和同步方法。
回复 使用道具 举报
wangqing 黑马帝 2011-11-10 13:31:53
7#
多线程有两种实现方法:
1、通过继承Thread类实现
2、通过实现Runnable接口来实现
同步也有两种方式实现
1、通过同步代码块
synchronized(对象)
{
  需要被同步的代码
}
2、通过同步方法
public synchronized void add()
   {
        需要被同步的代码  
   }
但是同步的前提:
1、必须要有两个或者两个以上的线程
2、必须是多个线程使用同一个锁
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马