「java多线程访问控件」跨线程访问控件

博主:adminadmin 2022-11-22 21:29:06 62

今天给各位分享java多线程访问控件的知识,其中也会对跨线程访问控件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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多线程访问控件的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。