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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪龙 注册黑马   /  2014-4-14 12:31  /  1273 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程有几种实现方法?同步有几种实现方法? 【请教大神!!!】

5 个回复

正序浏览
两种方式创建线程
1.extends Thread
2.implements Runnable(推荐)


synchronized同步使用.

1.同步块
        synchronized(任意对象){
                               
        }
注意:多个线程所使用的锁对象必须是同一个。
                               
2.同步方法.
        synchronized做为一个修饰符去修饰方法。
                               
        1.非static方法。          锁对象就是 this
        2.static方法              锁对象就是  类名.class.

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
两种 继承Thread和实现Runnable接口
回复 使用道具 举报
1,多线程:
(1) 实现runnable
(2) 继承Thread
(3) 继承callable
2,同步
(1) synchronized 块
(2) synchronized 方法
(3) Lock 类
(4) CountDownLatch
(5) CycleBarrier
(6) Signal
(7) 静态变量
(8) final 对象
对了,静态变量本身也是同步的哦,以上的是我知道的和朋友讲,自己也没有全部用过,不过是告诉你,给你个思路,有兴趣的话你可以深入研究哦

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
如何创建线程:
创建线程的第一种方式:继承Thread类。
步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
目的:将自定义代码存储在run方法。让线程运行。
3,调用线程的start方法,该方法两个作用:启动线程,调用run方法。
(当然,如果你想直接调用run方法也是可以的,但是那就不是多线程了)

代码示例:
class ThreadTest extends Thread{
public void run(){
线程运行代码;
}
}
class Test{
public static void main(String[] args){
ThreadTest threadTest = new ThreadTest();
thread.start();
}
}


简化格式:
class Test{
public static void main(String[] args){
new Thread(){
public void run(){
线程运行代码;
}
}.start();
}
}

创建线程的第二种方式:实现Runnable接口。
实现步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
代码示例:
class RunnableTest implements Runnable{
public void run(){
线程运行代码;
}
}
class Test{
public static void main(String[] args){
RunnableTest runnableTest = new RunnableTest();
Thread thread = new Thread(runnableTest);
thread.start();
/*
简化到一步到为,new Thread(new Runnable()).start();
*/
}

}
简化格式:
class Test{
public static void main(String[] args){
new Thread(new Runnable(){
public void run(){
线程运行代码;
}
}).start();
}
}
为什么要将Runnable接口的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子接口对象。
所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
实现方式和继承方式有什么区别:
(1)、实现方式好处:避免了单继承的局限性
(2)、在定义线程时:建议使用实现方式
(3)、两种方式区别:
1.继承Thread:线程代码存放在 Thread 子类 run 方法中
2.实现Runnable:线程代码存放在接口的子类的 run 方法中
总结建议:建议使用第二种线程创建方法。因为第二种方式更加体现面向对象思想。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马