Kondisi balapan dalam variabel dalam metode statis

Saya punya metode sebagai berikut:

public static void method() {

int i = 0;
i = i + 1;

}

Saya memiliki variabel int di dalam metode statis. Dan metode tersebut diakses oleh beberapa Thread.
Pertanyaan saya adalah:

  1. Apakah variabel i masuk ke kondisi balapan?
  2. Bagaimana jika metode diakses di aplikasi web pegas dan diakses oleh banyak pengguna secara bersamaan?

person Lakmal Vithanage    schedule 23.02.2017    source sumber
comment
lihat stackoverflow.com/q/17343157/2809326 ini   -  person arjun    schedule 23.02.2017
comment
@ElliottFrisch Ini bukan thread-lokal, ini adalah variabel tumpukan. (Perbedaannya adalah peserta kembali.)   -  person chrylis -cautiouslyoptimistic-    schedule 23.02.2017


Jawaban (2)


Jika variabel dideklarasikan dalam suatu metode, maka variabel tersebut berada dalam stackframe yang disediakan untuk satu kali pemanggilan metode. Stackframe hanya diakses oleh thread yang memanggil metode tersebut. Tidak ada kondisi balapan dalam contoh yang diposting, setiap pemanggilan metode mendapatkan salinan variabelnya sendiri. Anda memerlukan status bersama untuk mendapatkan kondisi balapan.

Stackframe ini adalah hal-hal yang menumpuk ketika menjalankan metode rekursif, dan memakan ruang tumpukan hingga suatu saat sistem kehabisan ruang dan terjadi kesalahan stackoverflow, karena rekursi menghasilkan semakin banyak stackframe yang dialokasikan, sementara tidak ada satu pun dari mereka yang dialokasikan. pemanggilan metode mendapat kesempatan untuk diselesaikan (yang akan mengosongkan ruang tumpukannya).

person Nathan Hughes    schedule 23.02.2017

Tidak, Tidak ada kondisi balapan dengan variabel lokal metode statis. Karena untuk setiap pemanggilan metode baik statis maupun non-statis akan ada memori terpisah di tumpukan, sehingga variabel lokal metode statis ini akan terpisah untuk setiap thread, dan tidak akan ada kondisi balapan di sana.

person Arvind Kumar Maurya    schedule 09.10.2019