public class threadInterrupt { public static class firstthread implements Runnable { private threadInterrupt s; public firstthread(threadInterrupt s_) { s = s_; } public void run() { try { synchronized (s.o1) { System.out.println("first thread!"); Thread.sleep(500); System.out.println("interrupting"); s.t2.interrupt(); System.out.println("leaving"); } } catch (Exception e) { e.printStackTrace(); } } } public static class secondthread implements Runnable { private threadInterrupt s; public secondthread(threadInterrupt s_) { s = s_; } public void run() { try { Thread.sleep(250); synchronized (s.o1) { System.out.println("second thread!"); s.o1.wait(); } } catch (Exception e) { e.printStackTrace(); } } } public Object o1 = new Object(); public Thread t1 = null; public Thread t2 = null; public static void main(String args[]) { System.out.println("should exit with java.lang.InterruptedException"); threadInterrupt s = new threadInterrupt(); firstthread r1 = new firstthread(s); secondthread r2 = new secondthread(s); s.t1 = new Thread(r1, "a"); s.t2 = new Thread(r2, "b"); s.t1.start(); s.t2.start(); } } /* * These are local overrides for various environment variables in Emacs. * Please do not remove this and leave it at the end of the file, where * Emacs will automagically detect them. * --------------------------------------------------------------------- * Local variables: * mode: java * indent-tabs-mode: t * c-basic-offset: 4 * tab-width: 4 * End: * vim:noexpandtab:sw=4:ts=4: */