`
san_yun
  • 浏览: 2653135 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Set的并发错误

    博客分类:
  • java
 
阅读更多
package test;

import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Main {

    private Set<Integer> set = Collections
            .synchronizedSet(new TreeSet<Integer>());

    public Main() {
        super();
    }

    public void print() {
        // System.out.println("print:"+Thread.currentThread().getName());
        Iterator<Integer> it = set.iterator();

        while (it.hasNext()) {
            Integer num = it.next();
            System.out.print(num);
        }

    }

    public void add(int i) {
        // System.out.println("add:"+Thread.currentThread().getName());
        set.add(i);

    }

    public void remove(int i) {
        // System.out.println("rempove:"+Thread.currentThread().getName());
        if (set.contains(i)) {
            set.remove(i);
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {

        final Main main = new Main();

        Runnable run1 = new Runnable() {

            @Override
            public void run() {

                while (true) {
                    main.print();
                    System.out.println("");
                }
            }
        };

        Runnable run2 = new Runnable() {

            @Override
            public void run() {

                while (true) {

                    for (int i = 0; i < 10; ++i) {
                        main.add(i);
                    }
                }
            }
        };

        Runnable run3 = new Runnable() {

            @Override
            public void run() {

                while (true) {

                    for (int i = 0; i < 10; ++i) {
                        main.remove(i);
                    }
                }
            }
        };

        new Thread(run1).start();
        new Thread(run2).start();
        new Thread(run3).start();
    }

}

 
分享到:
评论

相关推荐

    高并发和并发编程

    线程安全是并发编程中的核心概念,确保多个线程在共享数据时不会引发错误或不一致状态。线程安全可以通过几种方式实现: 1. **互斥**:通过锁机制(如synchronized关键字)来确保同一时间只有一个线程能访问特定...

    Oracle并发问题处理

    如果不希望立即返回错误,可以选择使用WAIT子句指定等待时间,如`FOR UPDATE WAIT 3`。 2. **乐观锁定** - **定义**:与悲观锁相对,乐观锁假设并发冲突较少,因此在数据更新时不锁定数据,而是在提交更新时检查...

    [学习笔记]JMeter压力测试及并发量计算-1

    - 如果遇到错误提示“`No X11 DISPLAY variable was set, but this program performed an operation which requires it.`”,说明图形界面无法正常启动。这时可以采用命令行模式运行JMeter。 #### 二、JMeter脚本...

    IIS网站高性能高并发优化解决方案

    通过命令行执行`appcmd setconfig /section:serverRuntime /appConcurrentRequestLimit:100000`,将IIS允许的最大并发请求限制设置为100000,确保能够处理大量的并发请求。 **步骤三:修改machine.config** 打开`%...

    论文研究-软错误与老化在线并发检测器 .pdf

    软错误的原因通常分为两种:单事件翻转(SEU)和单事件瞬态(SET)。SEU主要出现在SRAM、锁存器、触发器等时序逻辑中,占所有软错误的绝大多数。SET则在组合逻辑中较为常见。针对这些情况,器件设计和工艺中必须采取防护...

    使用TimeStamp控制并发问题示例

    SqlCommand updateCmd = new SqlCommand("UPDATE YourTable SET Data = @data WHERE Id = @id AND Timestamp = @originalTimestamp", conn); updateCmd.Parameters.AddWithValue("@data", tbValue.Text); updateCmd....

    MySQL并发更新数据时的处理方法

    在MySQL数据库中,当涉及到并发更新数据时,正确处理这些操作以确保数据一致性至关重要。本文主要探讨了在并发环境中MySQL如何处理UPDATE语句,以及两种常见的解决方案:通过事务显式加锁和使用乐观锁机制。 首先,...

    IOS并发编程指南

    - **处理错误和异常**:通过 `-setExecutionBlock:` 方法中的异常处理逻辑来确保程序的健壮性。 #### 2.8 为Operation对象确定一个适当的范围 根据操作的性质,确定合适的执行范围是非常重要的。例如,对于耗时较...

    基于libcurl实现http post支持并发,异步

    实际项目中,你可能还需要处理错误、优化性能,以及更复杂的回调逻辑。 通过学习和实践这些概念,你将能够熟练地使用libcurl库在C++环境中构建高效的网络应用,无论是进行并发请求还是实现异步处理,都能得心应手。...

    Go-golang-set-Go的线程安全的和非线程安全的高性能集

    `golang-set`库提供了一种实现,包括线程安全和非线程安全的高性能集,非常适合在Go的并发环境中使用。 首先,我们要理解什么是线程安全和非线程安全。线程安全指的是在多线程环境下,一个函数或方法在同一时刻可以...

    对java的BitSet的多线程并发的探索

    但是,当多个线程同时修改BitSet时,由于这些操作不是原子的,可能会导致数据竞争,从而引发错误的结果。 为了在多线程环境下使用BitSet,有几种策略可以考虑: 1. **同步访问**:可以使用synchronized关键字对...

    tcp并发通信

    在实际开发中,还需要考虑错误处理、资源管理、性能优化等多方面因素,以确保系统的稳定性和高效性。在"4_tcp_concurrent_select"这个文件中,可能包含了具体的代码示例和详细实现过程,供开发者参考学习。

    linux下用select并发服务器

    // 错误处理 // ... } else if (activity &gt; 0) { if (FD_ISSET(server_fd, &read_fds)) { // 有新的连接请求 // ... } else { // 已连接的客户端有数据可读 for (int i = 0; i ; ++i) { if (FD_ISSET(i, &...

    VFP的SET命令一览表.pdf

    53. SET LOGERRORS:决定是否记录编译错误到文本文件,便于后期分析。 54. SET MACHELP:管理“Microsoft FoxPro帮助”菜单项的行为。 55. SET MACKEY:定义宏键,为特定功能创建快捷键。 以上就是VFP的SET命令...

    Select()系统调用及 文件描述符集fd_set的应用.rar_fd_set_select fd_select sock

    总结,`select()`系统调用和`fd_set`是实现并发I/O的重要工具,尤其在需要管理大量并发连接的网络服务中。通过合理的使用,可以有效地提高程序的效率和响应速度。然而,需要注意的是,`select()`存在文件描述符数量...

    简单实用的PHP并发请求url类

    PHP的`stream_socket_client()`函数可以配合`stream_set_blocking()`设置为非阻塞模式,使得在一个循环中,即使某个连接还在等待响应,其他连接也可以继续尝试建立。这样,可以在一个循环中并发地发起多个请求。 4....

    net-snmp get set

    2. 错误处理:在使用Qtsnmp进行SNMP通信时,必须处理可能的错误,如超时、通信失败等。 3. 安全性:SNMP操作通常涉及社区字符串,这相当于访问密码。确保其安全性,避免未授权访问。 4. 并发处理:在多线程或异步...

    Java并发缺陷模式1

    在清单1中,`_set`变量被声明为`volatile`,但`_set++`操作并不是原子的,这意味着在无锁保护的情况下,多线程环境下可能会产生竞态条件,导致错误的`_set`值。要避免这种问题,开发者应确保对`volatile`变量的非...

    tcp socket实现单进程单线程 高并发服务端(c++源码)

    1. **非阻塞I/O**:在非阻塞模式下,当Socket无法立即完成读写操作时,不会阻塞调用,而是立即返回一个错误状态,从而让主线程可以继续处理其他任务。 2. **事件驱动编程**:利用如select、poll或epoll等系统调用来...

Global site tag (gtag.js) - Google Analytics