public void run() {
            try {
                boolean toggle = true;
                while (!Thread.currentThread().isInterrupted()) {
                    value = random.nextInt(1000);
                    boolean result = true;
                    if (toggle) {        // insert on even turns
                        final int arg = value;
                        try {
                            result = TThread.doIt(new Callable<Boolean>() {
                                public Boolean call() {
                                    return list.add(value);
                                }
                            });
                        } catch (InterruptedException ex) {
                            Transaction.Status status = Transaction.getLocal().getStatus();
                            if (status.equals(Transaction.Status.ABORTED)) {
                                break;
                            } else {
                                TThread.currentThread().interrupt();
                            }
                        }
                        if (result) {
                            insert.getAndIncrement();
                        } else {
                            missed.getAndIncrement();
                        }
                    } else {              // remove on odd turns
                        result = TThread.doIt(new Callable<Boolean>() {
                            public Boolean call() throws InstantiationException, IllegalAccessException {
                                return list.remove(value);
                            }
                        });
                        if (result) {
                            remove.getAndIncrement();
                        } else {
                            missed.getAndIncrement();
                        }
                    }
                    toggle = !toggle;
                }
            } catch (InterruptedException e) {
                return;
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
            return;
        }