Java'da yeni başlayan bir girişimciyim ve çok iş parçacıklı uygulamalara rastladım. Bu sorunun burada bazı yayınlara benzediğini biliyorum ancak sorgum için daha iyi bir yanıt bulamadım. Temel olarak, bir nesneyi statik bir yönteme iletmek istiyorum ve yöntem, yalnızca nesnenin değerlerine/özelliklerine dayanarak bir çıktı döndürecektir. Her çağrı için, nesnenin yeni bir örneğini oluşturuyorum ve herhangi bir şekilde, yöntemin içindeki nesneyi değiştirecek hiçbir şansım yok. Şimdi, benim sorum, JVM statik yönteminin ve yerel değişkenlerinin yeni bir örneğini, birden çok iş parçacığı tarafından her çağrı için Yığında (nesne yığınta olacak şekilde hariç) oluşturacak mı? Ben ne elde etmek istediğinizi net bir görünüm için, burada benim kodudur:Bir nesne başvurusunu statik yardımcı yönteme geçiren çok sayıda Konu
TestConcurrent.java
import classes.Player;
public class TestConcurrent
{
private static int method(Player player)
{
int y = (player.getPoints() * 10) + 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
return ++y;
}
public static void main(String[] args) throws Exception
{
// Create 100 threads
for(int i=1;i<=100;i++)
{
final int j = i;
// Create a new Thread
new Thread()
{
public void run()
{
// Create a new instance of the Player class
Player player = new Player(j,j,"FirstName" + j, "LastName" + j);
// Call static method() and pass a new instance of Player class
System.out.println("Thread " + j + ": " + TestConcurrent.method(player));
// Check the values of the Player class after the call to the static method()
System.out.println("Player" + player.getAcctId() + " : Points=" + player.getPoints() + " Name=" + player.getFirstName() + " " + player.getLastName());
}
}.start();
}
}
}
Player.java
package classes;
public class Player
{
private int acctId, points;
String firstName, lastName;
public Player(int acctId, int points, String firstName, String lastName)
{
this.acctId = acctId;
this.points = points;
this.firstName = firstName;
this.lastName = lastName;
}
public int getAcctId() {
return acctId;
}
public void setAcctId(int acctId) {
this.acctId = acctId;
}
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
ÇIKIŞ:
Eşzamanlı bir anahtar kelime koymadığımdan E çıkışı her zaman farklı olacaktır ve aşağıdaki benzer: (çıkış doğrudur ve tam olarak ben bekliyorum, ne ben sadece ben eşitleme kullanmak istemiyorsanız beri doğru yolda olduğumu açıklamak istiyorum statik yöntemini çağırabilirsiniz önce her iş parçacığı bitirmek diğer iş, beklemek zorunda kalacak çünkü
Thread 2: 22
Player8 : Points=8 Name=FirstName8 LastName8
Thread 22: 222
Thread 26: 262
Thread 23: 232
Player23 : Points=23 Name=FirstName23 LastName23
Thread 21: 212
Player21 : Points=21 Name=FirstName21 LastName21
Thread 25: 252
Player25 : Points=25 Name=FirstName25 LastName25
Thread 20: 202
Thread 19: 192
Thread 24: 242
Player24 : Points=24 Name=FirstName24 LastName24
Player9 : Points=9 Name=FirstName9 LastName9
Thread 28: 282
+1 - Harika ilk soru! StackOverflow'a hoş geldiniz! – jmort253