Synchronized e Volatile

Olá.

Uma pergunta, quando eu crio um atributo como volatile eu preciso criar o método como synchronized?

	private volatile No primeiro = null;
	private volatile No ultimo = null;
	private volatile int tamanho = 0;

 public synchronized void limparFila() {
		primeiro = ultimo = null;
		tamanho = 0;

		new Thread(new Runnable() {
			public void run() {
				System.gc();

			}
		}).start();
	}

Vale lembrar que outros métodos também usam esse atributos.

Obrigado.

Se seus métodos única e exclusivamente setam e lêem valores de um só desses atributos por vez, não.

Caso contrário sim. Aí é melhor até tirar fora a palavra volatile deles.