java访问不同线程中的对象

编程入门 行业动态 更新时间:2024-10-22 02:40:09
本文介绍了java访问不同线程中的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我搜索了很多,但找不到特定的解决方案。还有一些问题,关于这个stackoverflow,但我不能找到满意的答案,所以我再问。

I have searched a lot but not able to find particular solution. There are also some question regarding this on stackoverflow but i am not able to find satisfactory answer so i am asking it again.

我在java中有一个类。 我知道如何在java中使用主题。

I have a class as follow in java . I know how to use threads in java.

//please do not consider syntax if there is printing mistake, as i am typing code just for showing the concept in my mind public class myclass{ private List<String> mylist=new ArrayList<String>(); public addString(String str){ //code to add string in list } public deleteString(String str){//or passing an index to delete //code to delete string in list } }

b $ b

现在我想同时做这两个操作。因为我已经创建了两个线程类一个执行addString()逻辑运行和另一个执行deleteString()logic.i通过mylist在每个线程的构造函数,但如何在执行添加和删除后返回一个对象mylist?

now i want to do these two operations simultaneously. for that i have created two thread class one performs addString() logic in run and another perform deleteString() logic.i am passing mylist in the constructor of each thread but how can i return an object after performing addition and deletion to mylist?

在我之前,我想如果我传递mylist在线程的构造函数,它传递mylist的地址到线程和线程执行操作,更改参考mylist对象但它不像那样,因为更改不会反映到mylist对象。可以任何人阐述这一点吗?

Before i was thinking that "If i am passing the mylist in constructor of thread it passes the address of the mylist to thread and thread performs operations on it that changes refer to mylist object" But it is not like that as the changes are not reflacted to mylist object . can any one elaborate this?

这是什么最好的方法来实现?

what is the best way to achieve this?

这样的要求是,如果一个线程插入元素最后另一个线程应该能够删除一些元素在其他索引说同时第二。

the requirement is like that if a thread is inserting an element at last another thread should be able to delete some element at other index say 2nd simultaneously.

EDIT

我做了如下:thanx到Enno Shioji

i have done it as follow: thanx to Enno Shioji

public class myClass { private List<String> mylist = Collections.synchronizedList(new ArrayList<String>()); public myClass(){ mylist.add("abc"); mylist.add("def"); mylist.add("ghi"); mylist.add("jkl"); } public void addString(String str) { mylist.add(str); } public void displayValues() { for (int i = 0; i < mylist.size(); i++) { System.out.println("value is " + mylist.get(i) + "at " + i); } } public void deleteString(int i) { mylist.remove(i); } } class addThread { public static void main(String a[]) { final myClass mine = new myClass(); Thread t1 = new Thread() { @Override public void run() { mine.displayValues(); mine.addString("aaa"); mine.displayValues(); } }; Thread t2 = new Thread() { public void run() { mine.displayValues(); mine.deleteString(1); mine.displayValues(); } }; t1.start(); t2.start(); } }

有没有其他方法? p>

is there any other way to do so?

推荐答案

使用同步列表,这将是线程安全的

Use Synchronized List , It would be thread safe

使用 Collection.synchronizedList(yourPlainList)

更多推荐

java访问不同线程中的对象

本文发布于:2023-11-12 12:26:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1581496.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:线程   对象   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!