Ya siz anlamadınız, ya ben anlatamadım tabi; uzun konulu şeyleri kısa yorumlara sığdırmaya çalışmak zor, benim hatam.
PHP:
public static void main(String[] args) {
doFunction();
doFunction();
}
private void doFunction() {
System.out.println("Hello World!");
}
Burada "doFunction" methodu aynı anda çağrılmaz, bunu bildiğinizi varsayıyorum. Bu iki defa "Hello World!" yazdıracaktır, siz bunun için bir "Task" açar veyahut direk "Multi-Threading" yapıp doFunction methodunu aynı anda çağırırsanız bir hata almazsınız zira; çakışacak bir şey mevcut değil burada, buna "synchronized" kelimesini eklemek aynı anda çalıştırılırken sırayla çalışmasını sağlayacaktır ki aynı anda çalışsa dahi hata vermeyecek bir şey için buna gerek yok, sadece boşu boşuna methodu bekletmenize yarar. Şimdi aşağıdaki kodu inceleyelim.
PHP:
private static synchronized void registerBot(String input, String input2, String input3) throws Exception {
URL url = new URL(input);
Map<String, Object> params = new LinkedHashMap<String, Object>();
String username = input2 + UUID.randomUUID().toString().replaceAll("-", "");
String password = input3 + UUID.randomUUID().toString().replaceAll("-", "");
String mail = username + "@gmail.com";
params.put("kadi", username);
params.put("sifre", password);
params.put("email", mail);
params.put("kayitol", "kayitol");
StringBuilder postData = new StringBuilder();
for (Map.Entry<String, Object> param : params.entrySet()) {
if (postData.length() != 0) postData.append('&');
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setDoOutput(true);
conn.getOutputStream().write(postDataBytes);
Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
for (int c; (c = in.read()) >= 0; ) ;
System.out.println(username + " : " + password);
}
Siz eğer bunu "synchronized" yapmadan aynı anda değil, aynı saniyede çağırırsanız işte o zaman hata alırsınız. Burada yapılan işlem anlık değildir, kendi içinde Thread'leri mevcuttur kullanılan fonksiyonların. Aynı şekilde şu kod;
PHP:
private static int i = 5;
public static boolean doFunction() {
if (i >= 5) {
i = i - 5;
return true;
} else {
return false;
}
}
Eğer buradaki "doFunction" methodu bir Task veyahut Multi-Threading aracılığı ile eğer ki aynı anda çağırılırsa işte o zaman iki tane çağrılan methoda da olmaması gereken bir şekilde "true" döndürülecektir. İşte burada girer "synchronized" olaya. Sizin yazdığınız fonksiyona bakacak olursak.
PHP:
public static synchronized String genCode()
{
StringBuilder builder = new StringBuilder(LENGHT);
Random random = new Random();
for (int i = 0; i < LENGHT; i++)
builder.append(ALPHABET[random.nextInt(ALPHABET.length)]);
String code = builder.toString();
[B]CODES.add(code);[/B]
return code;
}
Hayır, burada hiçbir çakışma olma ihtimali yok. Sizin çakışır diye düşündüğünüz şey muhtemelen kalın yaptığım yer. Eğer aynı anda çağrılırsa CODES'in güncellenmemiş olma ihtimalinden, öyle bir ihtimal mevcut değil. Ha bu arada benim en sonda yazdığım şey ise şu kodu şuna çevirmekti.
PHP:
String alphabet = "abcdefghıjklmnoprstuvyzxw";
String randomString = "";
for (int i = 0; i < 3; i++) {
randomString += String.valueOf(alphabet.charAt((new Random()).nextInt(alphabet.length())));
}
randomString = randomString.replace(String.valueOf(randomString.charAt((new Random()).nextInt(3))), String.valueOf((new Random()).nextInt(10))).toUpperCase();
System.out.println(randomString);
PHP:
String alphabet = "abcdefghıjklmnoprstuvyzxw";
String randomString = "";
Random random = new Random();
for (int i = 0; i < 3; i++) {
randomString += String.valueOf(alphabet.charAt(random.nextInt(alphabet.length())));
}
randomString = randomString.replace(String.valueOf(randomString.charAt(random.nextInt(3))), String.valueOf(random.nextInt(10))).toUpperCase();
System.out.println(randomString);
Bu arada dediğiniz şey elbet imkansız değil, bir şey kodlarken olabilecek her şeyi göz önünde bulundurmanızda fayda var. Maksat yapılan işlem belli uzunlukta rastgele sayı ve karakterlerden oluşan bir kod oluşturmaksa daha kolayı ve pratiği var, iyi forumlar
PHP:
String randomString = UUID.randomUUID().replaceAll("-", "").substring(0, 9);