小编sho*_*301的帖子

互斥方法

我正在学习Java多线程编程.我有一个以下逻辑:

假设我有一个A类

class A {
    ConcurrentMap<K, V> map;

    public void someMethod1 () {
        // operation 1 on map
        // operation 2 on map
    }

    public void someMethod2 () {
        // operation 3 on map
        // operation 4 on map
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我不需要同步"someMethod1"或"someMethod2"中的操作.这意味着如果有两个线程同时调用"someMethod1",我不需要序列化这些操作(因为ConcurrentMap将完成这项工作).

但是我希望"someMethod1"和"someMethod2"是彼此的互斥,这意味着当某个线程正在执行"someMethod1"时,另一个线程应该等待进入"someMethod2"(但是应该允许另一个线程进入"someMethod1").

那么,简而言之,有没有一种方法可以让"someMethod1"和"someMethod2"不是互相的互斥体而是互相的互斥体?

我希望我说的问题足够明确......

谢谢!

java multithreading

7
推荐指数
1
解决办法
1820
查看次数

面向对象的设计 - 暂停功能

我试图突破我的OOD思维.这是我的问题.

假设你想设计一个音乐mp3播放器.我收到了一个包含播放列表的课程.

class Player {
    Map<String, List<Song>> playlists;    // <Name, PlayList>
    public void play (Song song) {
        // decode song
        // play song
    }
    public void play (String playlistName) {
        // play a playlist
        for (Song song : playlists.get(playlistName)) {
            play (song);
        }
    }
    public void stop () {
        // stop playing
    }
    public void pause () {
        // pause, resume playing the last song when hit play again
    }
}
Run Code Online (Sandbox Code Playgroud)

我们假设"歌曲"已经包含了歌曲的所有元数据.已经描述了方法的所有功能.当我试图实现"暂停"方法时,我被困住了.你会怎么做才能意识到这一点?

谢谢!

java oop

1
推荐指数
1
解决办法
444
查看次数

标签 统计

java ×2

multithreading ×1

oop ×1