读写锁简单Dome

读写锁一般用于项目中清理缓存,下边就是一个小的Demo.当线程操作写方法时,读线程等待。

public class Cache {

static Map<String, Object> map = new HashMap<String, Object>();

static ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

static Lock r = rwl.readLock();

static Lock w = rwl.writeLock();

// 获取一个key对应的value

public static final Object get(String key) {

r.lock();

try {

System.out.println("正在做读的操作,key:" + key + " 开始");

Thread.sleep(100);

Object object = map.get(key);

System.out.println("正在做读的操作,key:" + key + " 结束");

System.out.println();

return object;

} catch (InterruptedException e) {

} finally {

r.unlock();

}

return key;

}

// 设置key对应的value,并返回旧有的value

public static final Object put(String key, Object value) {

w.lock();

try {

System.out.println("正在做写的操作,key:" + key + ",value:" + value + "开始.");

Thread.sleep(100);

Object object = map.put(key, value);

System.out.println("正在做写的操作,key:" + key + ",value:" + value + "结束.");

System.out.println();

return object;

} catch (InterruptedException e) {

} finally {

w.unlock();

}

return value;

}

// 清空所有的内容

public static final void clear() {

w.lock();

try {

map.clear();

} finally {

w.unlock();

}

}

public static void main(String[] args) {

new Thread(new Runnable() {

@Override

public void run() {

for (int i = 0; i < 10; i++) {

Cache.put(i + "", i + "");

}

}

}).start();

new Thread(new Runnable() {

@Override

public void run() {

for (int i = 0; i < 10; i++) {

Cache.get(i + "");

}

}

}).start();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当谈到OpenGL的基础示例时,一个常见的Dome(圆顶)场景是一个不错的选择。以下是一个简单的基础示例,展示了如何使用OpenGL绘制一个简单的圆顶场景: ```cpp #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); // 设置相机位置和朝向 gluLookAt(0.0, 0.0, 5.0, // 相机位置 0.0, 0.0, 0.0, // 目标位置 0.0, 1.0, 0.0); // 上方向 // 绘制圆顶 glColor3f(1.0, 1.0, 1.0); // 设置颜色为白色 glutWireSphere(2.0, 20, 20); // 绘制一个半径为2的圆顶 glFlush(); glutSwapBuffers(); } void reshape(int width, int height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, (GLfloat)width / (GLfloat)height, 0.1, 100.0); glMatrixMode(GL_MODELVIEW); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutCreateWindow("OpenGL Dome"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; } ``` 在这个示例中,我们使用了OpenGL的固定管线(Fixed Pipeline)来绘制圆顶。首先,我们设置了相机的位置和朝向,然后绘制一个简单的圆顶,使用`glutWireSphere`函数来创建一个具有指定半径和细分级别的球体。 在`main`函数中,我们初始化了OpenGL环境,并创建了一个窗口。然后,我们指定了显示函数`display`和重塑函数`reshape`。在显示函数中,我们清空颜色缓冲区和深度缓冲区,并使用`gluLookAt`函数设置相机视角。然后,我们绘制圆顶,并刷新缓冲区。 编译并运行这个示例程序,你将看到一个简单的圆顶场景。 希望这个基础示例对你有帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值