السلام عليكم و رحمة الله تعالى و بركاته
سؤال : هل يكمن اعادة قيمة من الـ java thread ؟؟؟
من خلال البحث و جدت الواجهة Callable , بس كان تطيبقها صعب و ما عطيتني نتائج اللي كان بدي ياها
أرجو المساعدة
السلام عليكم و رحمة الله تعالى و بركاته
سؤال : هل يكمن اعادة قيمة من الـ java thread ؟؟؟
من خلال البحث و جدت الواجهة Callable , بس كان تطيبقها صعب و ما عطيتني نتائج اللي كان بدي ياها
أرجو المساعدة
بسم الله الرحمن الرحيم
وَلَنَبْلُوَنَّكُمْ بِشَيْءٍ مِنَ الْخَوْفِ وَالْجُوعِ وَنَقْصٍ مِنَ الأَمْوَالِ وَالأَنْفُسِ وَالثَّمَرَاتِ وَبَشِّرِ الصَّابِرِينَ (155) الَّذِينَ إِذَا أَصَابَتْهُمْ مُصِيبَةٌ قَالُوا إِنَّا لِلَّهِ وَإِنَّا إِلَيْهِ رَاجِعُونَ (156) أُولَئِكَ عَلَيْهِمْ صَلَوَاتٌ مِنْ رَبِّهِمْ وَرَحْمَةٌ وَأُولَئِكَ هُمُ الْمُهْتَدُونَ (157) صدق الله العظيم
---------------------------------------------------------------------
مضى عامانِ يا أمي
وليلُ دمشقَ
فلُّ دمشقَ
دورُ دمشقَ
تسكنُ في خواطرنا
مآذنها.. تضيءُ على مراكبنا
كأنَّ مآذنَ الأمويِّ..
قد زُرعت بداخلنا..
كأنَّ مشاتلَ التفاحِ..
تعبقُ في ضمائرنا
كأنَّ الضوءَ، والأحجارَ
جاءت كلّها معنا..
-------------------------------------------------------------------------
ما هي مشكلة ال Callable ؟
http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة
https://moalfat.com للكتب الالكترونية والكورسات التعليمية
Everything we see now is just an engineering solution based on old science
johnIV كتب:السلام عليكم و رحمة الله تعالى و بركاته
سؤال : هل يكمن اعادة قيمة من الـ java thread ؟؟؟
من خلال البحث و جدت الواجهة Callable , بس كان تطيبقها صعب و ما عطيتني نتائج اللي كان بدي ياها
أرجو المساعدة
نعم بمكن اعادة قيمة من ال thread
شوووف هذا الكود
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Callble;
/**
*
* @author bach
*/
//import java.awt.List;
import java.util.ArrayList;
import java.util.concurrent.*;
//import org.omg.CORBA.IntHolder;
public class testcall
{
public static void main(String[] args ) throws InterruptedException, ExecutionException
{
int [] tab={10,1,8,3,2,0,0};
int N=4;
ArrayList<Future<int[]>> list=new ArrayList<Future<int[]>>();
//ArrayList<Future<Integer>> list=new ArrayList<>();
ExecutorService pool = Executors.newFixedThreadPool(1);
sommes s=new sommes(tab,0,tab.length-1);
Future<int[]>f=pool.submit(s);
for(int k=0;k<7;k++)
{
list.add(f);
// pool.submit(s);
//FutureTask<Integer> f=new FutureTask<Integer>(s);
}
pool.shutdown();
int[] k={0,0,0,0};
int i=0;
for(Future<int[]>x:list)
{
k=x.get();
System.out.println("tab["+i+"]=" +k);
i++;
}
}
}و الأن الكلاس بال callable تعيد array type integer
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Callble;
/**
*
* @author bach
*/
import java.util.concurrent.*;
public class sommes implements Callable<int[]>
{
int d,f,t[];
int u=0;
public sommes(int[] x,int d,int f)
{
t=x;
this.d=d;
this.f=f;
}
public int[] call () throws java.io.IOException
{
//partition( t, d, f);
//System.out.print(" " +s);
//System.out.println("" +f);
triRapide( t, d, f);
/*for(int i=0;i<5;i++)
{
System.out.println("" +t);
}*/
return t;
}
public void permuter(int[] t, int i, int j)
{
int temp = t;
t = t[j];
t[j] = temp;
}
public int partition(int[] t, int d, int f)
{
int v = t[d]; // valeur pivot
int i = d-1;
int j = f+1;
System.out.println("v=" +v);
System.out.println("i=" +i);
System.out.println("j=" +j);
boolean b=true;
while(b) {
do {
j--;
} while(t[j] > v);
do {
i++;
} while(t < v);
if(i < j)
{
permuter(t, i, j);
} else {
b=false;
}
}
return j;
}
public void triRapide(int[] t, int d, int f)
{
if(d < f)
{
int p = partition(t, d, f);
/* for(int i=0;i<p;i++)
{
System.out.println("tab_one["+i+"]=" +t);
i++;
}*/
triRapide(t, d, p);
triRapide(t, p+1, f);
}
}
}Just Be Nice
شكر للمرور و الاهتمام و سبب التاخير بالرد هو انشغالي بعدة مشاريع موخرا
المشكلة كانت بالcallables هو ان التابع call يعيد قيمة interger حسب الـ java api وكان بدنا حل سريع و هلا مشي الحال
و الحل بسيط
وانا كنت عم استرجع resultset من ال DataBase و عم خزنها ب List والـ List هي القيمة المعادة من الـ Thread
حل المشكلة هو التالي :
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class testcallable {
public static void main(String[] args) throws ExecutionException,
InterruptedException {
Callable callable = new Callable() {
private boolean add;
@Override
public List<Integer> call() throws Exception {
List<Integer> List1 = new ArrayList<Integer>();
add = List1.add(1);
return List1;
}
};
ExecutorService service = Executors.newFixedThreadPool(2);
Future<List<Integer>> result = service.submit(callable);
List<Integer> intArray = result.get();
System.out.println(intArray.get(0).toString());
}
}بسم الله الرحمن الرحيم
وَلَنَبْلُوَنَّكُمْ بِشَيْءٍ مِنَ الْخَوْفِ وَالْجُوعِ وَنَقْصٍ مِنَ الأَمْوَالِ وَالأَنْفُسِ وَالثَّمَرَاتِ وَبَشِّرِ الصَّابِرِينَ (155) الَّذِينَ إِذَا أَصَابَتْهُمْ مُصِيبَةٌ قَالُوا إِنَّا لِلَّهِ وَإِنَّا إِلَيْهِ رَاجِعُونَ (156) أُولَئِكَ عَلَيْهِمْ صَلَوَاتٌ مِنْ رَبِّهِمْ وَرَحْمَةٌ وَأُولَئِكَ هُمُ الْمُهْتَدُونَ (157) صدق الله العظيم
---------------------------------------------------------------------
مضى عامانِ يا أمي
وليلُ دمشقَ
فلُّ دمشقَ
دورُ دمشقَ
تسكنُ في خواطرنا
مآذنها.. تضيءُ على مراكبنا
كأنَّ مآذنَ الأمويِّ..
قد زُرعت بداخلنا..
كأنَّ مشاتلَ التفاحِ..
تعبقُ في ضمائرنا
كأنَّ الضوءَ، والأحجارَ
جاءت كلّها معنا..
-------------------------------------------------------------------------
يظهر لي من الكود وأسلوب الاستخدام أن العملية submit تقوم بتنفيذ تعليمة wait
فهل أنا محق؟ وإن كان كذلك ما الفائدة من تعدد الخيوط بالنسبة لكم؟
تحياتي