黑马程序员技术交流社区
标题:
保证多线程的线程安全都有哪些办法啊?
[打印本页]
作者:
尘埃落定
时间:
2014-5-26 23:01
标题:
保证多线程的线程安全都有哪些办法啊?
保证多线程的线程安全都有哪些办法啊?
作者:
凌羽猎风
时间:
2014-5-26 23:08
我只知道 使用 stringbuffer 比 stringbulider 更安全, 其他的不清楚 还没看到线程呢
作者:
lvc
时间:
2014-5-27 01:33
同步代码块和同步函数
synchronized(对象)
{
需要被同步的代码块
}
同步函数就是把synchronized作为函数修饰符,同步函数使用的锁使用的是this
静态函数使用的锁是 类名.class
只了解这么多,共勉。
作者:
Dark_Horse
时间:
2014-5-27 09:29
用同步机制,加锁,下面的代码是看视频中敲的,老师讲的详细
package com.test.java;
public class XianC implements Runnable{
/**
* @param args
*
*/
private int ticket =200;
Object obj = new Object();
boolean b=true;
public void run() {
// TODO Auto-generated method stub
if(b){
while(true){
synchronized(this){
if(ticket>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" code "+ticket--);
}
}
}
}else
while(true)
show();
}
//同步函数 的锁是this
//如果换为静态的方法public static synchronized void show()时那么上面的锁应该是XianC.class而不是this锁了
public synchronized void show(){
if(ticket>0){
//Thread.sleep(10);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" show "+ticket--);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
XianC xc = new XianC();
//Thread t = new Thread(xc);
Thread t1 = new Thread(xc);
Thread t2 = new Thread(xc);
t1.start();
//如果不加入下面一句话 打印出的结果都是在show方法中的
try{Thread.sleep(10);}catch(Exception e){}
//停留10毫秒 现在只有t1能运行 t1进去为真执行同步代码块 10毫秒就醒了就执行
//xc.b=false这时候为假所以执行同步函数
xc.b=false;
//为什么都在show方法下执行解释如下
t2.start();
}
}
复制代码
作者:
1007087594
时间:
2014-5-27 10:36
不懂……
作者:
茂子
时间:
2014-5-27 15:02
保证多线程运行安全可以理解有以下几种方式:
1、将run()方法中涉及到的赋值代码放入同步代码块中,即synchronized(obj){赋值代码},obj相当于一把锁;
2、将run()方法中要调用到的函数同步,即对函数同步;
3、创建一个锁对象,是之后的升级版本,即,Lock lock =new ReentrantLock();在运行代码的前上锁Lock.lock,线程运行完后释放锁,Lock.unlock。
特别注意的是:当多个线程操作同一资源时(或者涉及到同步嵌套时),所使用到的对象锁必须是同一个,否则会造成死锁或者数据混乱,同时为了保证线程交替运行,需要在运行代码中写入wait()冻结线程和notifyAll()唤醒机制,否则会造成线程一直处于休眠状态。。。
个人理解,可能有一定的不全,仅供交流
作者:
侯金龙
时间:
2014-5-27 17:30
同步函数,同步代码块
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2