「java多线程访问控件」跨线程访问控件
今天给各位分享java多线程访问控件的知识,其中也会对跨线程访问控件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 多线程 两个线程访问两个对象中不同的synchronized修饰的方法。(方法和对象都是同一个类的)
- 2、java中多个线程访问一个方法,只有一个线程能够访问这个方法,而其他线程会被关闭,怎么做?
- 3、java通过snmp多线程并发访问设备获取数据
java 多线程 两个线程访问两个对象中不同的synchronized修饰的方法。(方法和对象都是同一个类的)
先上结论:两个线程访问不同对象中不同的synchronized方法不会受到synchronized的限制。
程序运行结果之所以这样,原因在于run()方法的实现导致的。
线程1中,先调用m.test1(),接着Thread.sleep(1000)
线程2中,先Thread.sleep(1000),接着调用m.test2()
主程序中,线程1与2都有可能先开始,无论谁先开始,结果都是线程1中m.test1()先结束,线程2中m.test2()后结束。
因为轮到线程2时,先Thread.sleep(1000),将资源让给线程1
改进方法,应该在打印时,让线程sleep
class Test{
synchronized public void test1(){
for(int p = 0; p 5; p++){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("s1.run.TestSynchronized_test 1");
}
}
synchronized public void test2(){
for(int p = 0; p 5; p++){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("s2.run.TestSynchronized_test 2");
}
}
}
run()方法中直接调用即可
class TestSynchronized_1 implements Runnable{
private Test m;
public TestSynchronized_1(Test m){
this.m = m;
}
public void run(){
m.test1();
}
}
class TestSynchronized_2 implements Runnable{
private Test m;
public TestSynchronized_2(Test m){
this.m = m;
}
public void run(){
m.test2();
}
}
输出结果如下:
s2.run.TestSynchronized_test 2
s2.run.TestSynchronized_test 2
s1.run.TestSynchronized_test 1
s1.run.TestSynchronized_test 1
s2.run.TestSynchronized_test 2
s1.run.TestSynchronized_test 1
s2.run.TestSynchronized_test 2
s1.run.TestSynchronized_test 1
s2.run.TestSynchronized_test 2
java中多个线程访问一个方法,只有一个线程能够访问这个方法,而其他线程会被关闭,怎么做?
1)可以在该方法上加一个同步锁,让其变为同步方法,这样每次就只有一个线程可以访问,而其他的线程只有等到他访问完之后才有机会访问。
2)可以在方法中设置参数count,访问时累加,然后判断。
一定要关闭的话,首先要判断是那一个线程访问了方法,之后将其他的关闭就可以了。
java通过snmp多线程并发访问设备获取数据
snmp访问设备获取数据有异步的方法,跟多线程同时使用效果更好
java多线程访问控件的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于跨线程访问控件、java多线程访问控件的信息别忘了在本站进行查找喔。
发布于:2022-11-22,除非注明,否则均为
原创文章,转载请注明出处。