38 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| layout: default_docs
 | |
| title: Chapter 10. Using the Driver in a Multithreaded or a Servlet Environment
 | |
| header: Chapter 10. Using the Driver in a Multithreaded or a Servlet Environment
 | |
| resource: media
 | |
| previoustitle: Server Prepared Statements
 | |
| previous: server-prepare.html
 | |
| nexttitle: Chapter 11. Connection Pools and Data Sources
 | |
| next: datasource.html
 | |
| ---
 | |
| 
 | |
| A problem with many JDBC drivers is that only one thread can use a `Connection`
 | |
| at any one time --- otherwise a thread could send a query while another one is
 | |
| receiving results, and this could cause severe confusion.
 | |
| 
 | |
| The PostgreSQL™ JDBC driver is thread safe. Consequently, if your application
 | |
| uses multiple threads then you do not have to worry about complex algorithms to
 | |
| ensure that only one thread uses the database at a time.
 | |
| 
 | |
| If a thread attempts to use the connection while another one is using it, it
 | |
| will wait until the other thread has finished its current operation.  If the
 | |
| operation is a regular SQL statement, then the operation consists of sending the
 | |
| statement and retrieving any `ResultSet` (in full). If it is a fast-path call
 | |
| (e.g., reading a block from a large object) then it consists of sending and
 | |
| retrieving the respective data.
 | |
| 
 | |
| This is fine for applications and applets but can cause a performance problem
 | |
| with servlets. If you have several threads performing queries then each but one
 | |
| will pause. To solve this, you are advised to create a pool of connections. When
 | |
| ever a thread needs to use the database, it asks a manager class for a `Connection`
 | |
| object. The manager hands a free connection to the thread and marks it as busy.
 | |
| If a free connection is not available, it opens one.  Once the thread has
 | |
| finished using the connection, it returns it to the manager which can then either
 | |
| close it or add it to the pool. The manager would also check that the connection
 | |
| is still alive and remove it from the pool if it is dead.  The down side of a
 | |
| connection pool is that it increases the load on the server because a new session
 | |
| is created for each `Connection` object.  It is up to you and your applications's
 | |
| requirements. | 
