Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / spring threads sql select / 6 сообщений из 6, страница 1 из 1
22.04.2013, 08:31:15
    #38234540
qwerty2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring threads sql select
есть веб приложение
spring controller -> service -> interface dao -> dao impl

есть вот такой вот класс
ему давала аннотациия как сервисе и ка репозиторий
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public class Simultaneous implements Runnable {

    public static final int THREADS = 3;

    public static class Semaphore {

        public boolean set = false;
    }
    public static final Semaphore[] semaphores =
            new Semaphore[THREADS];
    public static final Thread[] threads = new Thread[THREADS];
    public static Random rnd = new Random();
    public final int threadNum;

    public Simultaneous(int num) {
        this.threadNum = num;
    }

    public static int getRndNumber() {
        return rnd.nextInt(1000) * 10;
    }

    @Override
    public void run() {
        synchronized (semaphores) {
            semaphores[this.threadNum].set = true;
            semaphores.notify();
        }

        final long startExec = System.currentTimeMillis();
        executeTask();
        final long finishExec = System.currentTimeMillis();
        System.out.println("Thread N" + this.threadNum + ". Start: "
                + startExec + ". End: " + finishExec
                + ". Total: " + (finishExec - startExec) + ".");
    }
    
    @Transactional
    public void executeTask() {
       тут я хочу выполнять sql select
    }   
}



а вот так я пытаюсь использовать его в сервисе

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
 public String sqlTest() {
        for (int i = 0; i < Simultaneous.THREADS; i++) {
            Simultaneous.semaphores[i] = new Simultaneous.Semaphore();
        }

        System.out.println("Starting " + Simultaneous.THREADS + " threads...");

        synchronized (Simultaneous.class) {
            synchronized (Simultaneous.semaphores) {
                for (int i = 0; i < Simultaneous.THREADS; i++) {
                    final Simultaneous mainThread = new Simultaneous(i);
                    Simultaneous.threads[i] = new Thread(mainThread, "Thread N" + i);
                    Simultaneous.threads[i].setDaemon(true);
                    Simultaneous.threads[i].start();
                }

                System.out.println("Waiting for simultaneous start...");

                boolean isAllStarted = false;
                while (!isAllStarted) {
                    try {
                        Simultaneous.semaphores.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    isAllStarted = true;
                    for (int i = 0; i < Simultaneous.THREADS; i++) {
                        if (!Simultaneous.semaphores[i].set) {
                            isAllStarted = false;
                            break;
                        }
                    }
                }
            }
        }

        System.out.println("Waiting for threads to finish execution...");

        for (int i = 0; i < Simultaneous.THREADS; i++) {
            try {
                Simultaneous.threads[i].join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("Program terminated successfully.");

        return "";
    }




при деплое вообщем ошибка выходит

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [net.model.Simultaneous]: No default constructor found; nested exception is java.lang.NoSuchMethodException: net.model.Simultaneous.<init>()
...
Рейтинг: 0 / 0
22.04.2013, 09:24:39
    #38234566
Serebatos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring threads sql select
сделайте конструктор без параметров

сейчас у вас:

Код: java
1.
2.
3.
public Simultaneous(int num) {
        this.threadNum = num;
    }
...
Рейтинг: 0 / 0
22.04.2013, 11:01:41
    #38234688
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring threads sql select
И еще пару замечаний по коду - не лепите где только можно synchronized, почти все из них в вашем коде не имеют смысла. Потоки запускайте через Executor, самописный семафор тоже нафиг не упал, если есть стандартный, к тому же вам может подойдет лучше CountDownLatch
...
Рейтинг: 0 / 0
22.04.2013, 13:35:40
    #38234946
qwerty2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring threads sql select
а как лучше поточность сделать для такой задачи

с браузера идет гет запрос с параметрами
я хочу выполнить селекты с этими параметрами в базу одновременно в разных потоках
дождаться выполнения собрать в 1 ответ и отправить на браузер результат
...
Рейтинг: 0 / 0
22.04.2013, 13:37:30
    #38234951
qwerty2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring threads sql select
в классе Simultaneous я обьявлял
Код: java
1.
2.
    @Autowired
    private SessionFactory sessionFactory; 


и дао
но там всеравно нульпоинтер выходит.
а рандоманый код исполняеться
...
Рейтинг: 0 / 0
22.04.2013, 16:06:10
    #38235250
qwerty2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring threads sql select
переделал на
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 class Service implements Runnable {

        private final String name;
        private final int timeToStart;
        private final CountDownLatch latch;

        public Service(String name, int timeToStart, CountDownLatch latch) {
            this.name = name;
            this.timeToStart = timeToStart;
            this.latch = latch;
        }

        @Override
        public void run() {
            try {                
                Thread.sleep(timeToStart);
            } catch (InterruptedException ex) {
                Logger.getLogger(Service.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println(name + " is Up");
            latch.countDown(); //reduce count of CountDownLatch by 1
        }
    }



запускаю так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        int THREADS = 10;
        Thread[] threads = new Thread[THREADS];
        final CountDownLatch latch = new CountDownLatch(THREADS);
        for (int i=0; i<THREADS; i++) {
          threads[i] = new Thread(new Service("Thread"+i, 1000, latch));
          threads[i].start();
        }
        
        try{
            latch.await();  //main thread is waiting on CountDownLatch to finish
            System.out.println("All services are up, Application is starting now");
        }catch(InterruptedException ie){
           ie.printStackTrace();
        }
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / spring threads sql select / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]