Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Многопоточность в java, ExecutorService, Runnable


(Roy Obenon) #1
import dataCluster.util.BaseTest;
import org.apache.log4j.Logger;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.sql.SQLException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class TestQuery implements BaseTest,Runnable {

ConnectToSQL connectToSQL;
Logger logger;

@BeforeTest
@Override
public void setup() {
 logger = Logger.getLogger("TestQuery");
}

@Override
public synchronized void run() {
    try {
        while (true) {
            connectToSQL.dbSelect("begin tran\n" +
                    "use [demo_sb]\n" +
                    "DECLARE @TableName VarChar(200)\n" +
                    "SET @TableName = '[dvsys_files]'\n" +
                    "EXECUTE ('SELECT * FROM' + @TableName)\n" +
                    "commit tran");
        }
    }catch (SQLException e) {
        e.printStackTrace();
    }
}

@Test
@Override
public void startTest()  {
    ExecutorService executorService = Executors.newCachedThreadPool();
    try {
        for (int i = 0; i < 20; i++) {
            System.out.println(executorService.toString());
            executorService.execute(new ConnectToSQL("jdbc:sqlserver://cluster:10234;DatabaseName=demo_sb", "sa", "qwerty"));
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}

@AfterTest
@Override
public void stop() {

}
}

Такой вопрос если синхронизирован блок ран, то по идеи один поток должен выполняться и всё! до того как будет переполнение стека и упадет с экспшн, но отрабатывает всё и по быстрому ))). И новых сессий нет, если смотреть select * from sysprocesses where spid > 50. (в принципе видно по хешкоду что все 20 потоков ссылаются на один объект, наверно нужно по другому создавать объекты)
Цель была получить кол-во сессий, сколько и потоков.
Может кто то знает в чем трабла?


(Roy Obenon) #2

Всем спасибо ))) тема закрыта.