package concurrency;public class DeadLock {public static void main(String[] args) {JavaFile firstFile = new JavaFile("file1");JavaFile secondFile = new JavaFile("file2");JavaCoder firstCode = new JavaCoder(firstFile, secondFile, "first coder:");JavaCoder secondCoder = new JavaCoder(secondFile, firstFile, "second coder:");firstCode.start();secondCoder.start();}}class JavaCoder extends Thread {public void run() {System.out.println(Thread.currentThread().getName() + "trying to checkin " + firstfile);this.firstfile.checkIn(this.secondfile);}private JavaFile secondfile;private JavaFile firstfile;JavaCoder(JavaFile firstFile, JavaFile secondFile, String name) {super(name);this.firstfile = firstFile;this.secondfile = secondFile;}};class JavaFile {private String name;JavaFile(String name) {this.name = name;}@Overridepublic String toString() {return this.name;}public synchronized void checkIn(JavaFile otherFile) {System.out.println(Thread.currentThread().getName() + "in check-in " + this);otherFile.checkOut();System.out.println(Thread.currentThread().getName() + "completing check-in " + this);}public synchronized void checkOut() {System.out.println(Thread.currentThread().getName() + "in check-out " + this);while (true) {}}};Sample Outputfirst coder:trying to checkin file1first coder:in check-in file1first coder:in check-out file2second coder:trying to checkin file2 ( This is the dead lock , second coder is trying to checkin file 2 which is locked by first coder for check-out)
Labels
Sample program in java for Deadlock
Stop a thread in java
static boolean stopRequested = false;public static synchronized boolean isStopped() {return stopRequested;}public static synchronized void stopRequested() {StopThread.stopRequested = true;}public static void main(String ar[]) throws InterruptedException {Thread runningThread = new Thread(new Runnable() {@Overridepublic void run() {while (!isStopped()) {System.out.println(stopRequested);}}});runningThread.start();System.out.println("Stop Running Thread");stopRequested();}
Effective JUNIT's
PIT
http://pitest.org/ best place to start
Mutations
supported and The details of each type of mutation are here
not
all are enabled by default (please check I am not sure)
How
to use with Maven
1) Add the plugin
x.x.somepackage.*
2) Execute the command mvn org.pitest:pitest-maven:mutationCoverage
3) Check the report in \target\pit-reports
Sonar:
Sonar
has a plugin for pit tests which adds
these survived mutations as violations
Eclipse :
To
install pit for eclipse refer
Java Object Class
it is the base class of all the classes in java
Methods in Java Object class
- hashCode:
- the more unique the hashCode is the more efficient is the hash map/table
- used to find the bucket in which an object goes into in a hash table.
- more than one invocation of hashCode of the same object should return same Integer.
- if two objects are equal according to equals method then their hashCode must be same.
- equals:
- is used in hashMap when two objects have same hashCode.
- if two objects are equal their hashCode must be same.
- it should be
- reflexive : x.equals(x)
- symmetric: x.equals(y) and y.equals(x)
- transtive: x.equals(y) y.equals(z) implies => x.equals(z)
- consitent: x.equals(y) should allways return same value.
- for null it should be false: x.equals(null) false
- the default behaviour of equals = “==” i.e is object comparision
- toString :
- the default implementation is
- classname @ hex format of the hashCode.
- its good to override toString .
- also should be concise and informative.
- clone:
- to clone the object .
- x.clone() != x
- x.clone().getClass() == x.getClass() Not mandatory *
- x.clone().equals(x) Not mandatory *
- alternative to clone is copy constructor
Subscribe to:
Posts (Atom)