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 потоков ссылаются на один объект, наверно нужно по другому создавать объекты)
Цель была получить кол-во сессий, сколько и потоков.
Может кто то знает в чем трабла?