powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / spring threads sql select
6 сообщений из 6, страница 1 из 1
spring threads sql select
    #38234540
qwerty2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть веб приложение
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
spring threads sql select
    #38234566
Serebatos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделайте конструктор без параметров

сейчас у вас:

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

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


и дао
но там всеравно нульпоинтер выходит.
а рандоманый код исполняеться
...
Рейтинг: 0 / 0
spring threads sql select
    #38235250
qwerty2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
переделал на
Код: 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
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / spring threads sql select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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