@Override
	public void start() throws MusicPlayerException {
		this.mLock.lock();
		try {
			if ( this.mStreamPlayerRunnable == null ) {
				throw new IllegalStateException(
						this +
								" has not been initialized yet!"
				);
			}
			if ( !this.mStreamPlayerRunnable.isStopped() &&
					this.mStreamPlayerRunnable.isAlreadyStarted() ) {
				throw new IllegalStateException( "Player is already playing" );
			}
			this.mStreamPlayerRunnable.mStopped = false;
			if ( this.mCreateOwnThread && this.mPlaybackExecutor == null ) {
				this.mPlaybackExecutor = Executors.newSingleThreadExecutor();
			}
			this.mPlaybackExecutor.execute( this.mStreamPlayerRunnable );
		}
		finally {
			this.mLock.unlock();
		}
	}