Bloqueio de tabela com JDBC

Pessoal, estou com um probleminha!
É o seguinte: no BD de um sistema que estou desenvolvendo tem várias tabelas cuja chave primária é um campo int.
Eu estou usando SQL Server e, como ele não possui campo auto-increment, eu, toda vez que vou inserir um novo objeto, eu pego o maior valor do campo, somo 1 e adiciono. Algo mais ou menos assim:

Statement stmt = con.prepareStatement();
ResultSet rs = stmt.executeQuery("select max(codigo) from teste");
rs.next();
con.executeUpdate("insert into teste(codigo) values(" + (rs.getInt(1) + 1) + ")");
con.commit();

O problema é que esse sistema vai rodar em várias máquinas usando um BD central. Nada me garante que dois usuários tentem inserir dois objetos na mesma tabela ao mesmo tempo.
Eu queria um jeito de fazer bloqueio de tabela no SQL Server para que só um usuário possa usar uma tabela por vez.
Alguém sabe como fazer isso ou tem alguma outra sugestão?

SQL Server nao tem autoIncrement??? da onde c tirou isso!!! que eu saiba sempre teve!!

Vc pode tentar trabalhar com Sequences, esse esquema de pegar o MAX(id) + 1 é uma furada, facilmente vai ocorrer erro de integridade.

O sql server não tem auto-increment mas tem IDENTITY, que é a mesma coisa.

Dá uma olhada.

Obrigado pela atenção pessoal!
Consegui resolver o problema. Achei no Enterprise Manager a opção de campo Identity, que funciona como autoIncrement.

Seria algo parecido com:

con.executeUpdate ("INSERT INTO teste ( campo1, campo2 ) VALUES (" /*-- os outros campos que não são Identity --*/ " ) ");
 ResultSet rs = stmt.executeQuery ("SELECT SCOPE_IDENTITY() AS 'codigo'");
 rs.next();
 int codigo = rs.getInt ("codigo");

(Se for o SQL 2000 ou 2005, use SCOPE_IDENTITY() em vez de @@IDENTITY, que tem problemas com triggers.)
(Se for usar o driver da Microsoft, use a construção acima. Não sei se o JTDS suporta a construção do JDBC 3.0 “getAutoGeneratedKeys” (não sei se o nome é exatamente esse).