导航:首页 > 编程语言 > java程序加锁

java程序加锁

发布时间:2022-11-12 04:12:17

java多线程加锁的问题

publicclassTest{
publicstaticvoidmain(String[]args)throwsInterruptedException{
System.out.println("2个线程开始执行....");
TestHellohello1=newTestHello("A",1000);
TestHellohello2=newTestHello("B",2000);
Threaddemo1=newThread(hello1);
Threaddemo2=newThread(hello2);
demo1.start();
demo2.start();
try{
demo1.join();
demo2.join();
}finally{
System.out.println("线程均执行完成....");
}
}
}

{
privateStringworkname;
privateintworktime;

//省略workname和worktime的set和get方法
publicTestHello(Stringworkname,intworktime){
super();
this.workname=workname;
this.worktime=worktime;
}

publicvoidrun(){
for(inti=0;i<5;i++){
System.out.println(this.workname+"运行"+i);
try{
Thread.sleep(worktime);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}

② java的 多线程应用 加锁解锁,使用多线程应当注意什么

1,加锁和解锁就是把一段代码括起来,也可以说是同步,
2,一般需要加锁的代码涉回及到了共享数据,如果多个答线程都开始执行这段代码那么就会出现异常结果,
3,给这段代码开始和结尾加锁以后这段代码只能有一个线程进来,数据就安全了,比如下面这段代码,
int i = 100;
if( i > 0) {
System.out.println( i -- );
}
假如这里有4个线程执行这段代码,结果就可能出现负数,因为 i = 1的时候,假如线程1枪到了CPU的执行权,执行到了System.out.println( i -- );这里,但是还没有执行,这时候线程2抢到了执行权,因为 i 还没有进行自减,所以线程2也执行到了System.out.println( i -- );这句话,这时候无论谁先执行,i 就等于0了,再次执行的话就出现了负数,

③ 关于JAVA里的加锁synchronized

1.凡使用synchronized标记的方法复,比如 public synchronized void func1() { .... },则制同时只有一个线程能够运行这个方法。比如,线程1正在运行func1,则其他线程需要运行func1的话,会卡住,等线程1运行func1结束后,其他线程中,才会有一个幸运儿成功争取到运行func1的资格,然后这个幸运儿线程开始运行func1。没有争取到运行资格的其他线程,会继续等待。

2.你的例子中,被锁定的是 方法 m1,而不是属性b。所以,m1的synchronized加锁操作,与b没有半点毛钱关系。

3.要实现你的锁b想法,其实很简单。去买一件贞操宝甲来就行了。开玩笑,哈哈。要锁b,把main方法里的tt.m2()修改为tt.m1()。

4.以后别用“b”作为变量,总觉得怪怪了。也许你现在还没长大,很单纯。但大人的世界里,“b”是一种不文雅但又对人类的未来有重要作用的东西。建议用cb来代替b。

④ java代码右下角加锁能运行吗为什么

能。java代码右下角加锁能运行,是因为多线程共享的代码区域需要上锁,防止多线程同时访问代码块,造成线程安全问题。

⑤ java的加锁机制的问题,简单回答一下就好

每个对象有唯一的一把锁。锁被某个线程获得后,其他线程会阻塞等待,直到锁被释放且获得。
语法
synchronize(对象){
....
},意思就是当前线程需要获得该对象的锁才能运行之后同步块中的代码,没获得就阻塞等待。
这样就避免对该对象同时有多个线程读写,造成数据不同步的问题,从而实现了“同步synchronization”

⑥ java加锁

对象是一个锁标志。按照先到先得的原则,如果有多个线程都会执行代码,并使用同一个对象作为锁,
synchronize(对象){
....
}
那么,先执行这段代码的那个线程,将会获得这个对象锁,而当这个线程执行这段代码的时候,其他线程也是使用这个对象作为锁的,就不能执行这段代码,知道最初得到这个锁的线程运行完这段代码,然后再把锁分配给下一个线程执行。

⑦ java中 请问我应该如何如何锁这段代码才符合要求

public Object getObject(String key,Object o) {
synchronized (map) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}}// 格式没法弄,自己弄一下
}

// demol0326 的回答意思使用MyTest的实例来加锁,但是map是static的,无法锁住
// MyTest的多个实例在多个线程中的请求

//禾木双子 :如果A线程在getObject方法的第二行停止,此时B线程进入getObject后执行部分代码, 此时B线程停止,A线程启动,他不会执行'多线程处理', 仍然有线程线程安全问题,(想像一下更多的线程进入该方法的情况,num甚至会得到负值)

⑧ JAVA编程同步,加锁如何实现,有何优缺点

同步锁“synchronize”,手动锁Lock

具体如何实现,这里不好说,一时说不清,自行搜索。

⑨ 如何使用java的锁机制

多线程同步的实现最终依赖锁机制。我们可以想象某一共享资源是一间屋子,每个人都是一个线程。当a希望进入房间时,他必须获得门锁,一旦a获得门锁,他进去后就立刻将门锁上,于是b,c,d...就不得不在门外等待,直到a释放锁出来后,b,c,d...中的某一人抢到了该锁(具体抢法依赖于jvm的实现,可以先到先得,也可以随机挑选),然后进屋又将门锁上。这样,任一时刻最多有一人在屋内(使用共享资源)。
java语言规范内置了对多线程的支持。对于java程序来说,每一个对象实例都有一把“锁”,一旦某个线程获得了该锁,别的线程如果希望获得该锁,只能等待这个线程释放锁之后。获得锁的方法只有一个,就是synchronized关键字。

⑩ JAVA编程同步,加锁如何实现,有何优缺点

加锁的方式有非常多,可以在程序上使用。或者是在数据库上操作。保证事务一致性即可

阅读全文

与java程序加锁相关的资料

热点内容
跨平台传文件 浏览:609
同花顺如何调用昨天的数据函数 浏览:617
extjsgrid图片大小 浏览:931
没有数据的大数据报告 浏览:405
学科学习网站有哪些 浏览:931
win10鼠标右键不能粘贴文件 浏览:607
中阳小姐微信 浏览:85
安卓误删系统文件 浏览:987
win10怎么删除隐藏流氓文件 浏览:84
excel怎么以文件格式发送 浏览:747
cad的工作空间文件格式 浏览:818
派派新版本下载2017 浏览:831
iphonesafari下载文件 浏览:955
打开的网站有广告怎么办 浏览:361
外资大数据 浏览:600
慈溪小孩子学编程哪里好 浏览:105
南邮大数据盐城 浏览:239
摄像头二维码java 浏览:258
屏幕录制教程 浏览:576
苹果屏幕总成国产牌子 浏览:261