Sebuah instance Jedis tidak threadsafe karena diimplementasikan dengan cara ini. Itulah keputusan yang dibuat oleh penulis perpustakaan.
Anda dapat memeriksa kode sumber BinaryJedis yang merupakan tipe super Jedis https://github.com/xetorthio/jedis/blob/master/src/main/java/redis/clients/jedis/BinaryJedis.java
Misalnya baris berikut:
public Transaction multi() {
client.multi();
client.getOne(); // expected OK
transaction = new Transaction(client);
return transaction;
}
Seperti yang Anda lihat, bidang transaksi dibagikan untuk semua utas menggunakan instance Jedis dan diinisialisasi dalam metode ini. Nantinya transaksi ini bisa digunakan di metode lain. Bayangkan dua utas melakukan operasi transaksional pada saat yang bersamaan. Hasilnya mungkin transaksi yang dibuat oleh satu utas secara tidak sengaja diakses oleh utas lain. Bidang transaksi dalam hal ini adalah akses status bersama yang tidak disinkronkan. Hal ini membuat Jedis menjadi non-threadsafe.
Alasan mengapa penulis memutuskan untuk membuat Jedis non-threadsafe dan JedisPool threadsafe mungkin untuk memberikan fleksibilitas bagi klien sehingga jika Anda memiliki lingkungan single-threaded Anda dapat menggunakan Jedis dan mendapatkan kinerja yang lebih baik atau jika Anda memiliki lingkungan multithreaded Anda dapat menggunakan JedisPool dan dapatkan keamanan utas.