folder Tahribat.com Forumları
linefolder Android - IOS Programlama
linefolder Android Threadın İçindeki Fonksiyona Erişmek



Android Threadın İçindeki Fonksiyona Erişmek

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    detCode
    detCode's avatar
    Kayıt Tarihi: 30/Kasım/2012
    Erkek

    Merhaba arkadaşlar pyronet kütüphanesi ile tcp client uygulaması yapıyorum. Ancak iki tane ayrı threadım var birinden diğerine veri aktarmam gerekiyor. Threaddan dışarıya veri aktarmak için handler kullanılıyor sanırım ancak, dışardan veya başka bi threaddan diğer threada nasıl erişebilirim ?


    Who is detCode?
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    theadlerini bir liste içerisinde tut hocam ya da threadpool mantığını kullan

    http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using-executors-and-threadpoolexecutor.html

     

    zamanında benim yazdığım bir kod, shared object var tabi.. o yüzden lock kullanılmış. yardımcı olur fikir vermesi bazında


    import java.util.ArrayList; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; public class Ex1 implements Lock { final private ThreadLocal<Integer> THREAD_ID = new ThreadLocal<Integer>(){ final private AtomicInteger id = new AtomicInteger(0); protected Integer initialValue(){ return id.getAndIncrement(); } }; ArrayList<Thread> threadList; volatile Counter counter= new Counter(0); private volatile AtomicInteger[] level ; private volatile AtomicInteger[] victim ; private volatile AtomicInteger[] threadAccessCounter; private volatile int n; private volatile int counter2=0; //for n thread counter inside loop. volatile boolean exit=false; long startedTime; long completedTime; public Ex1 (int n) { this.n = n; level = new AtomicInteger[n]; victim = new AtomicInteger[n]; // use 1.. n-1 threadAccessCounter= new AtomicInteger[n]; threadList = new ArrayList<Thread>(n); for (int i = 0; i < n; i++) { level[i] = new AtomicInteger(); victim[i] = new AtomicInteger(); threadAccessCounter[i]= new AtomicInteger(); threadList.add(new M()); //threadList.get(i).start(); } startedTime = System.nanoTime(); for(int i=0;i<n;i++) threadList.get(i).start(); } public void lock() { int me = THREAD_ID.get(); while(!exit){ for (int i=0 ; i<this.n ; i++) { System.out.println("Attempting Level " + i); level[me].set(i); victim[i].set(me); while (exists(me,i)){}; threadAccessCounter[i].set(threadAccessCounter[i].get()+1); if(counter.getCounterValue()<300000) counter.increment(); else { counter2++; Thread.currentThread().interrupt(); if(counter2==n) { exit=true; allThreadCompleted(me,i); break; } break; } } } } private void allThreadCompleted(int me, int i) { completedTime = System.nanoTime(); long duration = (completedTime - startedTime); double seconds = (double) (duration / 1000000000.0); String tmpstr=""; for (int j = 0; j < n; j++) tmpstr+="Thread Number "+ (j+1) +" -> Acccesed Count: "+ threadAccessCounter[j] + "\n"; System.out.printf("Threads completed.\nThe Last Counter Value: %d \nDuration: %f seconds\n-------------\nThread Info\n-------------\n%s", counter.getCounterValue(), seconds,tmpstr); } private boolean exists(int me, int i){ for(int k=0 ; k<this.n ; k++){ if(k==me) continue; if(level[k].get()>=i && victim[i].get()==me) return true; } return false; } public void unlock() { int me = THREAD_ID.get(); level[me].set(0); } public Condition newCondition() { throw new java.lang.UnsupportedOperationException(); } public boolean tryLock(long time, TimeUnit unit) throws InterruptedException { throw new java.lang.UnsupportedOperationException(); } public boolean tryLock() { throw new java.lang.UnsupportedOperationException(); } public void lockInterruptibly() throws InterruptedException { throw new java.lang.UnsupportedOperationException(); } public class M extends Thread { public void run() { System.out.println("Thread M is started. T_ID:" + getId()); lock(); unlock(); //for (int i = 0; i < 100000; i++) { // counter.increment(); /*try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ //} } } } class Counter { private volatile int counter; public Counter(int firstValue) { counter = firstValue; } public synchronized void increment() { int tmp = counter; tmp++; counter = tmp; } public synchronized void decrement() { int tmp = counter; tmp--; counter = tmp; } public int getCounterValue() { return counter; } }

     

     

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    detCode
    detCode's avatar
    Kayıt Tarihi: 30/Kasım/2012
    Erkek

    eyv. hocam, bu pyronet ıvırzıvırını telegram da kullanıyor onun kaynak kodlarında gezinirken gördüm birkaç bişey denicem hepsini


    Who is detCode?
Toplam Hit: 824 Toplam Mesaj: 3