我正在学习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"不是互相的互斥体而是互相的互斥体?
我希望我说的问题足够明确......
谢谢!
我试图突破我的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)
我们假设"歌曲"已经包含了歌曲的所有元数据.已经描述了方法的所有功能.当我试图实现"暂停"方法时,我被困住了.你会怎么做才能意识到这一点?
谢谢!