//Implement Runnable Interface...
class ImplementsRunnable
implements Runnable {
private int counter = 0;
public void run() {
counter++;
System.
out.
println("ImplementsRunnable : Counter : " + counter
); }
}
//Extend Thread class...
class ExtendsThread
extends Thread {
private int counter = 0;
public void run() {
counter++;
System.
out.
println("ExtendsThread : Counter : " + counter
); }
}
//Use the above classes here in main to understand the differences more clearly...
class ThreadVsRunnable {
// Multiple threads share the same object.
ImplementsRunnable rc = new ImplementsRunnable();
t1.start();
Thread.
sleep(1000); // Waiting for 1 second before starting next thread t2.start();
Thread.
sleep(1000); // Waiting for 1 second before starting next thread t3.start();
// Creating new instance for every thread access.
ExtendsThread tc1 = new ExtendsThread();
t11.start();
Thread.
sleep(1000); // Waiting for 1 second before starting next thread t21.start();
Thread.
sleep(1000); // Waiting for 1 second before starting next thread t31.start();
}
}
Ly9JbXBsZW1lbnQgUnVubmFibGUgSW50ZXJmYWNlLi4uCiBjbGFzcyBJbXBsZW1lbnRzUnVubmFibGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7Cgpwcml2YXRlIGludCBjb3VudGVyID0gMDsKCnB1YmxpYyB2b2lkIHJ1bigpIHsKICAgIGNvdW50ZXIrKzsKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW1wbGVtZW50c1J1bm5hYmxlIDogQ291bnRlciA6ICIgKyBjb3VudGVyKTsKIH0KfQoKLy9FeHRlbmQgVGhyZWFkIGNsYXNzLi4uCmNsYXNzIEV4dGVuZHNUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewoKcHJpdmF0ZSBpbnQgY291bnRlciA9IDA7CgpwdWJsaWMgdm9pZCBydW4oKSB7CiAgICBjb3VudGVyKys7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4dGVuZHNUaHJlYWQgOiBDb3VudGVyIDogIiArIGNvdW50ZXIpOwogfQp9CgovL1VzZSB0aGUgYWJvdmUgY2xhc3NlcyBoZXJlIGluIG1haW4gdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgbW9yZSBjbGVhcmx5Li4uCmNsYXNzIFRocmVhZFZzUnVubmFibGUgewoKcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAvLyBNdWx0aXBsZSB0aHJlYWRzIHNoYXJlIHRoZSBzYW1lIG9iamVjdC4KICAgIEltcGxlbWVudHNSdW5uYWJsZSByYyA9IG5ldyBJbXBsZW1lbnRzUnVubmFibGUoKTsKICAgIFRocmVhZCB0MSA9IG5ldyBUaHJlYWQocmMpOwogICAgdDEuc3RhcnQoKTsKICAgIFRocmVhZC5zbGVlcCgxMDAwKTsgLy8gV2FpdGluZyBmb3IgMSBzZWNvbmQgYmVmb3JlIHN0YXJ0aW5nIG5leHQgdGhyZWFkCiAgICBUaHJlYWQgdDIgPSBuZXcgVGhyZWFkKHJjKTsKICAgIHQyLnN0YXJ0KCk7CiAgICBUaHJlYWQuc2xlZXAoMTAwMCk7IC8vIFdhaXRpbmcgZm9yIDEgc2Vjb25kIGJlZm9yZSBzdGFydGluZyBuZXh0IHRocmVhZAogICAgVGhyZWFkIHQzID0gbmV3IFRocmVhZChyYyk7CiAgICB0My5zdGFydCgpOwoKICAgIC8vIENyZWF0aW5nIG5ldyBpbnN0YW5jZSBmb3IgZXZlcnkgdGhyZWFkIGFjY2Vzcy4KICAgIEV4dGVuZHNUaHJlYWQgdGMxID0gbmV3IEV4dGVuZHNUaHJlYWQoKTsKICAgIFRocmVhZCB0MTEgPSBuZXcgVGhyZWFkKHRjMSk7CiAgICB0MTEuc3RhcnQoKTsKICAgIFRocmVhZC5zbGVlcCgxMDAwKTsgLy8gV2FpdGluZyBmb3IgMSBzZWNvbmQgYmVmb3JlIHN0YXJ0aW5nIG5leHQgdGhyZWFkCiAgICBUaHJlYWQgdDIxID0gbmV3IFRocmVhZCh0YzEpOwogICAgdDIxLnN0YXJ0KCk7CiAgICBUaHJlYWQuc2xlZXAoMTAwMCk7IC8vIFdhaXRpbmcgZm9yIDEgc2Vjb25kIGJlZm9yZSBzdGFydGluZyBuZXh0IHRocmVhZAogICAgVGhyZWFkIHQzMSA9IG5ldyBUaHJlYWQodGMxKTsKICAgIHQzMS5zdGFydCgpOwogfQp9