打印
[技术问答]

如何在多线程中共享数据

[复制链接]
806|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Betty996|  楼主 | 2023-5-17 12:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何在多线程中共享数据

使用特权

评论回复
沙发
keaibukelian| | 2023-6-10 11:08 | 只看该作者

public class ThreadScopeShareDataStudy {

        private static int data = 0;
        private static Map<Thread,Integer> dataMap = new HashMap<Thread,Integer>();
        public static void main(String[] args) {
                for(int i = 0;i<2;i++){
                        new Thread(new Runnable() {
                                @Override
                                public void run() {
                                        int data = new Random().nextInt();
                                        System.out.println(Thread.currentThread().getName()+" push into data "+data);
                                        dataMap.put(Thread.currentThread(),data);
                                        new A().get();
                                        new B().get();
                                }
                        }).start();
                }
        }
       
        static class A{
                public void get(){
                        int data = dataMap.get(Thread.currentThread());
                        System.out.println("A from "+Thread.currentThread().getName()+" get data "+data);
                }
        }
        static class B{
                public void get(){
                        int data = dataMap.get(Thread.currentThread());
                        System.out.println("B from "+Thread.currentThread().getName()+" get data "+data);
                }
        }
}

使用特权

评论回复
板凳
wowu| | 2023-6-10 11:39 | 只看该作者
我们可以为共享数据加上一个锁  在使用的时候就锁上 用完了就解锁

使用特权

评论回复
地板
heimaojingzhang| | 2023-6-10 11:49 | 只看该作者
如果有两个以上不同的线程同时操作一个数据  产生的后果是不可预测的

使用特权

评论回复
5
renzheshengui| | 2023-6-10 13:11 | 只看该作者
对与多线程来说我们不知道何时会执行哪个线程,所以执行的顺序是不可知的

使用特权

评论回复
6
tpgf| | 2023-6-10 13:26 | 只看该作者
可以使用这个加锁的代码
for(int i=0;i<max;i++)
{
    P(&mutex);
    cnt++;
    V(&mutex);
}

使用特权

评论回复
7
chenjun89| | 2023-6-10 14:30 | 只看该作者
你这个是多进程吧,不是多线程。

使用特权

评论回复
8
LLGTR| | 2023-6-12 16:31 | 只看该作者
把数据定义成全局。

使用特权

评论回复
9
朝生| | 2023-6-12 16:32 | 只看该作者
这个问题会在好多面试上问到。

使用特权

评论回复
10
软核硬核| | 2023-6-12 16:33 | 只看该作者
看你是共享读还是读写,如果是读可以用写互斥量,如果是读写,就用一般的互斥量。

使用特权

评论回复
11
ex7s4| | 2023-6-18 15:00 | 只看该作者
在多线程中共享数据时,需要注意线程安全问题。为了保证线程安全,可以使用synchronized关键字或者其他同步机制来保护共享数据

使用特权

评论回复
12
b5z1giu| | 2023-6-18 16:10 | 只看该作者
一般是加锁才行,不然数据容易被修改

使用特权

评论回复
13
t1ngus4| | 2023-6-18 17:16 | 只看该作者
就弄个全局变量呗

使用特权

评论回复
14
w2nme1ai7| | 2023-6-18 18:20 | 只看该作者
你说的共享数据不是基础操作吗?

使用特权

评论回复
15
zhizia4f| | 2023-6-18 20:00 | 只看该作者
一般都是传参,就是数据赋值之后,得加锁才行

使用特权

评论回复
16
lamanius| | 2023-6-19 06:01 | 只看该作者
这么还没玩过,感觉RTT还是比较复杂的

使用特权

评论回复
17
l1uyn9b| | 2023-6-19 08:04 | 只看该作者
你可以参考一下官方的demo,基本上都有共享数据的操作

使用特权

评论回复
18
p0gon9y| | 2023-6-19 09:13 | 只看该作者
RTT的资料不是很多么,关于数据操作更是很多

使用特权

评论回复
19
y1n9an| | 2023-6-19 10:00 | 只看该作者
你用的是哪款开发板啊?我给你提供个示例也行

使用特权

评论回复
20
g0d5xs| | 2023-6-19 15:05 | 只看该作者
共享数据的话是指程序内部共享啊?还是咋弄?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

1412

帖子

1

粉丝