Един екземпляр на джедаите не е безопасен за нишки, тъй като е реализиран по този начин. Това е решението, което е взел авторът на библиотеката.
Можете да проверите в изходния код на BinaryJedis, който е супер тип джедаи https://github.com/xetorthio/jedis/blob/master/src/main/java/redis/clients/jedis/BinaryJedis.java
Например тези редове:
public Transaction multi() {
client.multi();
client.getOne(); // expected OK
transaction = new Transaction(client);
return transaction;
}
Както можете да видите, полето за транзакция се споделя за всички нишки, използващи Jedis екземпляр и се инициализира по този метод. По-късно тази транзакция може да се използва и по други методи. Представете си, че две нишки извършват транзакционни операции по едно и също време. Резултатът може да бъде, че транзакция, създадена от една нишка, е неволно достъпна от друга нишка. Полето за транзакция в този случай е споделено състояние за достъп, до което не е синхронизирано. Това прави джедаите небезопасни за нишки.
Причината, поради която авторът реши да направи Jedis не-threadsafe и JedisPool threadsafe може да е да осигури гъвкавост на клиентите, така че ако имате еднонишкова среда, можете да използвате Jedis и да получите по-добра производителност или ако имате многонишкова среда, можете да използвате JedisPool и получете безопасност на нишките.