Without two constructors you wouldn't need either the synchronized here or the check to see if table != null -- you'd just know that loadData is only ever called once (from a thread kicked off in the constructor), and you'd just check if it had completed using the dataLoaded check.

Note again the check above doesn't actually accomplish what's it's trying to do of ensuring loadData is only called once because the other check to see if table is null is not within a synchronized block.