学习JAVA,关于线程 以及 synchronize 的问题

没有sleep的情况下代码与结果
这是在没有sleep的情况下代码与结果
我运行了多次都是main2000 b = 1000 的结果
那么可以认为,main线程 是 一定 比 t 这个线程要快的吗?
main 和 t 这两个线程 是在同时运行的吗?
m2 加 上sleep
这是m2 加 上sleep
如果说 main 比 t 快
程序运行的到m2时 会先sleep(1000),然后b = 2000
同时m1 必须等m2 结束才能运行
当systemout输出后 不应该接着运行 那个输出tt.b 是2000 的值吗
为什么结果像是在m1 运行后 才输出的 1000这个结果
这样看t 线程又比 main 快了。。。。为什么会这样。。。
是我理解哪里出了问题。。。。
所以还想请教一下大家。。。。

还有下面这个两个该怎么理解。。。
1.锁的对象是谁,2.谁持有了锁

2个回答

第一个例子锁的是对象tt,对象tt获得了锁。
我自己运行了第一个列子的结果是 main b = 1000 1000。
第二个例子的结果是
b = 1000
main 2000

用了synchronize相当于限制了并发,调用者等待synchronize的代码运行完了才继续执行,这就是“同步”的意思。
被调用者拥有锁。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于线程的Synchronize()
我在线程里面的Synchronize(Func)的Fuc函数中对主界面上的两个Vcl控件进行了信息更新,但是奇怪的是只有一个有反映,另一个就死活没反应,不知道是不是Func里面只能对一个Vcl进行通信呢?
关于线程的synchronize()
请问大家,线程的synchronize(aa),aa为所调用的方法,那么aa方法可不可以有参数啊
线程学习之锁,ReentrantLock,Synchronize
一.ReentrantLock特点: 1.1 是独占锁并且是可重入的: 独占互斥的,需要手动释放锁; 可重入的,但是要释放相同次数的锁; 1.2 默认是非公平锁,也可以实现公平锁: 非公平锁:当前线程直接尝试获取锁,不管自己是不是身处队尾; 公平锁:按照队列顺序来,前面还有就等待; 创建的时候,加上参数true是公平锁,公平锁能够避免线程饥饿 1.3 可以获取锁时限等待:...
关于线程中Synchronize()函数的调用问题!
各位走过路过的高手帮帮忙喽~~~~~~嘿嘿!!rn小弟在做串口接收数据的时候用的是多线程,其中主体的Excute中只有几句代码rnwhile not Terminated dornbeginrn Synchronize(ReadPort);rnend;rn现在的问题是,我开了三个线程用来接收串口一、二、三上来的数据,在一个线程接收的时候我将其余的两个线程挂起(线程名.Suspend),在不断的挂起(Suspend),恢复(Resume)过程中,会出现程序死在那里的现象(本来接收线程开的时候CPU占用率达到80%以上,但是这时CPU占用率不超过5%)。这三个线程都是同一个类的不同对象。我就想问问各位高手,怎么样能避免程序死在那里?是不是由于Synchronize函数才会出现这种情况的啊?先谢谢大家了!!分不够再加~~~~
关于线程synchronize函数的用法问题
我写了一个线程类内的过程procedure initprog(const step:integer);,此过程是用来设置窗体中的进度条的,所以要用synchronize()。但是initprog过程的参数却不知怎么代进去,rnsynchronize(initprog);与synchronize(initprog(90));都不对,怎么做呢?请高手执教。
线程中使用Synchronize的问题!!!!
在线程中是否可以在Execute外的其它函数中使用Synchronize?并且Synchronize执行的函数内是否还可以有Synchronize,如这样是否可以:rnvoid __fastcall Thread::Execute()rnrn a();rnrnvoid __fastcall Thread::a()rnrn ----- rn Synchronize(b);rnrnvoid __fastcall Thread::b()rnrn ----- rn Synchronize(c);rnrnrn
线程有关Synchronize
我写的一个线程类.execute方法中加:rn rn Synchronize(Form1.setmingling);通过rn而 Synchronize(Form1.setmingling('123','123'));报错rn"there is no overloaded version of 'Synchronize' can be called with then arguments"rnrn请问这是怎么回事呀?只能同步procedure?rn
关于Java线程学习
Java实现多线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口并使用FutureTask使用线程
一个关于Synchronize的问题
我的程序基本结构是这样的:rnvoid __fastcall myhread::Execute()rnrn ........rn main();rn .......rnrnvoid __fastcall myhread::main()rnrn ............ rn process(BYTE* ptr)rn ...........rnrnvoid __fastcall myhread::process(BYTE* ptr)rn rn mypointer = ptr ////我要在myfunction里面用ptr,就申请一个全局变量 mypointer来传递 rn Synchronize(MyFunction)rn rn ............//后面还有处理ptr的程序 rnrnvoid __fastcall myhread::MyFunction()rnrn //在memo中显示mypointer的内容 rnrn我的问题是,因为Sychronize后,MyFunction是由主线程调用的,但在process函数后半部还有处理ptr的函数,所以在memo中显示mypointer内容时,会不会已经被修改了?
关于synchronize问题
这个函数是用来在线程中访问vcl对象的,对他的具体用法不是很了解,有谁能够给清楚的解释一下
关于线程(为什么我用synchronize进不了)
TReceiveThread = class(TThread)rn privatern FMsg: string;rn procedure showme;rn protectedrn procedure Execute; override;rn end;rnrnvarrn FThread: TReceiveThread;rnprocedure TReceiveThread.showme;rnbeginrn showmessage('123456');rnend;rnprocedure TReceiveThread.Execute;rnbeginrn while not Terminated dorn beginrn if Form1.IdTCPClient1.Connected thenrn beginrn FMsg := Form1.IdTCPClient1.ReadLn;rn FThread.Synchronize(showme);rn Sleep(100);rn end;rn end;rnend;rnrn为什么不显示123456呢
关于Java中synchronize的理解
缘由:理解java中synchronized关键字。指标:理解synchronized的含义。明确synchronized关键字修饰普通方法、静态方法和代码快时锁对象的差异。有如下一个类Aclass A{       public synchronized void a(){}          public synchronized void b(){}}然后创建两个对象A a1 = new A...
线程同步以及synchronize关键字的作用
整理一下有关线程同步的知识,以及synchronize控制线程同步最基本的用法 1、线程的同步 即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。(引用百度百科) 那么多线程环境下,必然会存在线程安全的问题,而线程同步就是在这种情况下,保证...
多线程 synchronize关键字用法 以及虚拟机对不同线程的调度
有两个问题请教大虾们:rn1.synchronize关键字锁定某个对象,假如线程A锁定,那么线程A在解锁后,是不是马上另一个该对象[color=#FF0000]锁池[/color]中的线程B马上开始执行,还是继续执行完线程A的其他代码?rnrn2.虚拟机对多线程的主动调度(并不是调用sleep,yield,join方法),也就是虚拟机对A线程执行一段时间后,主动让线程B执行一会,这不是存在很大的偶然性吗?在实际的编程肯定有这种影响吧,理解不是很深刻。
高分求助:关于线程中使用Synchronize的问题!
以下是代码 一会说问题rnprocedure A.execute; rnbegin rn while not Terminated do rn begin rn Synchronize(AA); rn sleep(1000); rn end; rnend; rnprocedure A.AA rnBEGIN rn fun(@zc1,@id); //这个是注入的注册函数1rn sleep(1000); [color=#FF0000] //主要是用来等待注入完毕 如果第一个注入每执行完就注入第二个就会错误[/color]rn fun(@zc2,@ID); //这个是注入的注册函数2rn sleep(1000); rn fun(@zc3,@ID); //这个是注入的注册函数3rn sleep(1000); rnEND rn问题这个需要循环4次才能注册完毕(直到弹出成功对话框) 小弟如果不用 Synchronize(AA)用 AA(调用方法**:=a.create(false)) 不知道为什么这个就注入一次这个线程就死了 不再循环了 如果用这个 Synchronize(AA) 我的程序就假死了 我知道这是因为 Synchronize(AA); 这个函数让我这个在主线程执行 这么多sleep让主线程假死掉了 小弟想用waitforsingleobject()这个函数来代替sleep() 这样就不会假死了 可是小弟不知怎么用这个waitforsingleobject(**,INFINITE) 第一个参数怎么写呀? fun这个是注入的函数我用sleep 也是因为不知道被注入的程序什么时候能执行完我注入的函数 所以我认为我应该用 waitforsingleobject 可是就是不知道怎么返回注入执行完毕的事件 或者类似的东西 求大虾们出手相助啊!
关于在线程中使用Synchronize函数的一个问题?
我在线程中使用Synchronize函数向主线程中的一个MEMO,和一个文本文件中添加信息。现在有10多个线程都要向相同的MEMO和文本文件中添加信息,我都用了Synchronize函数。我想问一下,是不是在添加的过程中还需要使用EnterCriticalSection和LeaveCriticalSection来保证多线程的同步?我在对全局变量的使用中是正常的,但是在对那个MEMO和文本文件使用CriticalSection同步的时候,当多个线程同时操作时程序会停掉,象挂起一样,请问是什么问题造成的?
java关于线程的问题
下午没什么事情做,重新回顾了一下关于java里面的线程相关的知识,第二次相比第一次学习,收货的确不少。 好了,言归正传,本次从入门级的开始,希望大家看起来简单易懂,嘿嘿! 什么是线程?我的理解就是线程是一个程序里面不同的执行路径(程序内部的顺序控制流) 进程与线程的区别:(3点) 进程是一个静态的概念 进程里面有一个主线程main()方法 同一时间点上,一个CPU只有一个线程在运行(注
关于java线程的问题
package BOOK;rnrnpublic class ThreadTerminate rn public static void manin(String args[])throws Exceptionrn int i=0;rn Hello h=new Hello();rn Thread t =new Thread(h);rn t.setPriority(Thread.MAX_PRIORITY);rn t.start();rn System.out.println("Please stop");rn h.stopRunning();rn while(i<5)rn System.out.println("Good Morning"+i++);rn rn rnrnrnclass Hello implements Runnablern int i=0;rn private boolean timeToQuit=false;rn public void run()rn while(!timeToQuit)rn System.out.println("Holle"+i++);rn tryrn if(i%2==0)rn Thread.sleep(10);rn catch(Exception e)rn rn rn public void stopRunning()rn timeToQuit=true;rn rnrnrn这是java书上关于一段线程的代码 rn为什么我输入到电脑里可是却无法运行 rn求大神解答
关于Java线程问题
当一个线程的run方法运行完毕后,线程进入死亡状态。 rn死亡状态是指线程从内存清除出去,不符存在了吗? rn线程池中的线程数量是怎么在线程执行Run完毕后保持线程数量不变的?
Java关于线程的问题
在Java线程这章对加锁等同步方式存在不理解,还望大家来帮帮忙!下面两道程序都存在写问题,希望大家解决并解释一下,这样估计我就懂了!rn[code=java]package practice.chapter_11;rn/**rn * rn * 随机产生一个大于10的整数n,再产生n个整数存放在数组中,创建两个线程并发的进行相加,一个线程求数组的前一半数的和s21,rn * 另一个线程求后一半数的和s22,再将两个线程求得的和相加s2,并计算利用双线程求出最终结果花费的时间t2rn *和不用线程直接求n个数的和花费的时间t1及值s1相比较 rn *rn */rnrn/**rn * rn * 测试类rn *rn */rnpublic class AddThread rn public static void addThreadSpentTime(Add add) rn long before = System.nanoTime();// 线程求和开始时间rn AddThread1 at1 = new AddThread1(add);rn AddThread2 at2 = new AddThread2(add);rn new Thread(at1).start();rn new Thread(at2).start();rn long sumAdd = at1.getSum() + at2.getSum();rn long later = System.nanoTime();// 线程求和结束时间rn long spentTime = later - before;rn System.out.println("使用双线程求得和为:" + sumAdd + "花费时间为:" + spentTime + "毫微秒");rn rnrn public static void main(String[] args) rn Add add = new Add();rn add.sumOfInt();rn System.out.println("求得整数从0到" + add.getNumber() + "的结果和为:"rn + add.getSum() + "花费了" + add.getSpentTime() + "毫微秒");rn AddThread.addThreadSpentTime(add);rn rnrnrn/**rn * rn *随机产生一个大于10整数n,在再产生n个大于10整数rn */rnclass Add rn public int[] idata;rn private int n;rn private long sumOfTime = 0;rn private long sum = 0;rnrn // 初始化数组idatarn public Add() rn n = (int) (Math.random() * 10000) + 10;rn idata = new int[n];rn for (int i = 0; i < n; i++) rn idata[i] = (int) (Math.random() * 10000) + 10;rn rn rnrn // 打印产生的整数rn public void printInts() rn for (int i = 0; i < n; i++) rn System.out.println("number" + (i + 1) + ": " + idata[i]);rn rn rnrn //取出求和结果rn public long getSum() rn return sum;rn rnrn // 获取整数的个数rn public int getNumber() rn return n;rn rnrn // 求数组idata[]中整数之和rn public void sumOfInt() rn long before = System.nanoTime();rn for (int i = 0; i < idata.length; i++) rn sum += idata[i];rn rn long later = System.nanoTime();rn sumOfTime = later - before;//统计求和花费时间rn rnrn // 计算n个整数求和所花费时间rn public long getSpentTime() rn return sumOfTime;rn rnrnrn/**rn * rn * AddThread1线程求数组中前一半之和rn *rn */rnclass AddThread1 implements Runnable rnrn private int center = 0;//获取数组中间下标rn public long sumAdd = 0;rn private long spentTime = 0;rn public int[] data;rn // 获取AddThread对象并求出数据的中间位置centerrn public AddThread1(Add add) rn center = add.getNumber() / 2;rn data = new int[center];rn data = add.idata;rn rnrn @Overridern public void run() rn long before = System.nanoTime();rn // 取得求和结果rn for (int i = 0; i < center / 2; i++) rn sumAdd += data[i];rn rn long later = System.nanoTime();//计算花费时间rn spentTime = later - before;rn System.out.println("求得从0到" + (center / 2 - 1) + "的结果和为:" + sumAddrn + "花费了" + spentTime + "毫微秒");rn rnrn // 取得求和结果rn public long getSum() rn return sumAdd;rn rnrn // 取得计算和所花费时间rn public long getSpentTime() rn return spentTime;rn rnrnrn/**rn * rn * AddThread2线程求数组中后一半之和rn *rn */rnclass AddThread2 implements Runnable rnrn private int center = 0;//获取数组中间下标rn public long sumAdd = 0;rn private long spentTime = 0;rn public int[] data;rn rn // 获取AddThread对象并求出数据的中间位置centerrn public AddThread2(Add add) rn center = add.getNumber() / 2;rn data = new int[center];rn data = add.idata;rn rnrn @Overridern public void run() rn long sumAdd = 0;rn long before = System.nanoTime();rn //求和rn for (int i = center / 2; i < center; i++) rn sumAdd += data[i];rn rn long later = System.nanoTime();rn spentTime = later - before;//计算花费时间rn System.out.println("求得从" + (center / 2) + "到" + center + "的结果和为:"rn + sumAdd + "花费了" + spentTime + "毫微秒");rn rnrn // 取得求和结果rn public long getSum() rn return sumAdd;rn rnrn // 取得计算和所花费时间rn public long getSpentTime() rn return spentTime;rn rn[/code]输出结果有误!rnrn[code=java]rnpackage practice.chapter_11;rn/**rn * rn * 题目:随机产生一个大于10的整数n,在产生n个整数,创建两个线程分别进行冒泡排序和快速排序,比较结果rn *rn */rnrn/**rn * rn * 测试类rn *rn */rnpublic class SortThread rn public static void main(String[] args) rn RandomNumber rn = new RandomNumber();rn BubbSortThread bst = new BubbSortThread(rn);rn QuickSortThread qst = new QuickSortThread(rn);rn // bst.run();rn // qst.run();rn new Thread(bst).start();rn new Thread(qst).start();rn rnrnrn/**rn * rn * RandomNumber类随机产生一个大于十的数n,再随机产生n个整数数rn *rn */rnclass RandomNumber rn public int[] idata;rn private int n;rnrn // 初始化数组idatarn public RandomNumber() rn n = (int) (Math.random() * 10) + 11;rn idata = new int[n];rn for (int i = 0; i < n; i++) rn idata[i] = (int) (Math.random() * 1000);rn rn rnrnrn/**rn * rn * BubbSortThread线程实现冒泡排序为 n个随机数进行排序rn *rn */rnclass BubbSortThread implements Runnable rn private int[] bst;rnrn BubbSortThread(RandomNumber rn) rn bst = new int[rn.idata.length];rn bst = rn.idata;rn rnrn // 冒泡排序rn public void bubbSort() rn synchronized (bst) rn for (int i = 0; i < bst.length; i++) rn for (int j = 0; j < bst.length - i - 1; j++) rn if (bst[j] > bst[j + 1]) rn int mid = bst[j];rn bst[j] = bst[j + 1];rn bst[j + 1] = mid;rn rn rn rn rn rnrn @Overridern public void run() rn // TODO Auto-generated method stubrn bubbSort();rn for (int i = 0; i < bst.length; i++) rn System.out.print(bst[i] + ", ");rn rn System.out.println();rn System.out.println("bobbing Sort完成。");rn rnrnrnrn/**rn * rn * QuickSortThread线程实现快速排序为 n个随机数进行排序rn *rn */rnclass QuickSortThread implements Runnable rn private int[] bst;rnrn QuickSortThread(RandomNumber rn) rn bst = new int[rn.idata.length];rn bst = rn.idata;rn rnrn // 快速排序rn public void quickSort(int data[], int left, int right) rn synchronized (data) rn if (left < right) rn int i = left, j = right;rn int temp = bst[i];rn int n = i;rn while (i < j) rn while (temp < bst[j] && j > i) rn j--;rn rn bst[n] = bst[j];rn n = j;rn while (temp > bst[i] && i < j) rn i++;rn rn bst[n] = bst[i];rn n = i;rn rn bst[i] = temp;rn quickSort(data, left, j - 1);rn quickSort(data, j + 1, right);rn rn rn rnrn @Overridern public void run() rn // TODO Auto-generated method stubrn quickSort(bst, 0, bst.length - 1);rn for (int i = 0; i < bst.length; i++) rn System.out.print(bst[i] + ", ");rn rn System.out.println();rn System.out.println("quick sort完成。");rn rnrn[/code]
关于JAVA线程的问题
JAVA中怎么暂停一个线程然后再继续
关于JAVA线程问题
因为之前下载是单线程的,考虑到速度问题就改成多线程了。但是发现线程还没有执行完成文夹流就关闭了,在关闭流前我又对线程的状态进行判断,是否因为方法不对,如下是代码。rn[code=java]rnList threads=new ArrayList();rn for(int j=0;j list=new ArrayList();rn list = exportmemberdao.getAllExportCondMemberist("select "+exportconfig_fieldname.substring(0,exportconfig_fieldname.length()-1)+" from member ".concat(cond).concat(" limit "+j*1000+",1000"));rn Thread thread=new Thread(new WriteExcel(list, workbook, exportconfig_fieldname, titles,"会员信息"+j));rn threads.add(thread);rn thread.start();rn rn rn //所有线程是否执行完毕rn int index=0;rn while(true)rn for (Thread thread : threads) rn if(!thread.isAlive())rn System.out.println("线程类:"+thread.getClass().getClass()+" 状态:"+thread.isAlive());rn index++;rn rn rn if(index==threads.size())rn break;rn rn rn String filename=basePath.concat(IConstants.nameSdf.format(new Date())).concat(".xls");rn FileOutputStream fileOutputStream=new FileOutputStream(new File(filename));rn workbook.write(fileOutputStream);rn fileOutputStream.close();rn[/code]rn最后流关闭后为什么线程中的业务方法还在执行(从控制台中可以看的很明显,我做了输出的)。rn就导致我写的文夹不完整。
关于Java线程的问题
MyThread类中的代码rnclass MyThread implements Runnablern int i = 100;rn public void run()rn while(true)rn synchronized(this)rn System.out.println(Thread.currentThread().getName() + i);rn i--;rn Thread.yield();rn if(i<0)rn break;rn rn rn rnrnrnText类中的代码rnclass Textrn public static void main (String args[])rn MyThread myThread = new MyThread();rn Thread t1 = new Thread(myThread);rn Thread t2 = new Thread(myThread);rn t1.setName("线程A");rn t2.setName("线程B");rn rn t1.start();rn t2.start();rn rnrnrn加了synchronized(this) 即同步锁以后,运行时后面的数字是从100到-1,但线程是a、b有交叉输出才对,rn可我试了n遍,永远都是从A100到A0,最后一个是B-1,求问这是为什么rn[img=https://img-bbs.csdn.net/upload/201508/08/1439049592_114043.png][/img]rn[img=https://img-bbs.csdn.net/upload/201508/08/1439049599_919515.png][/img]
关于Java的线程问题
当一个处于可运行状态的线程正在被CPU运行,当一个高于此优先级的线程从堵塞变为可运行时,是否CPU立即停止当前线程的运行,转而处理刚变为可运行状态的线程
关于java线程的问题!
java调用的线程使系统级的还是用户级的?
java synchronize关键字
[code=java][/code]package test.com;rnpublic class Test13_6 rnrn public static void main(String[] args) throws Exception rnrn My_Thread work = new My_Thread();rn Thread teacher = new Thread(work, "teacher1");rn teacher.start();rn new Thread(work, "teacher2").start();rn new Thread(work, "teacher3").start();rn new Thread(work, "teacher3").start();rn new Thread(work, "teacher3").start();rn new Thread(work, "teacher3").start();rn rnrnrnclass My_Thread implements Runnable rn private int i = 0;rn Object ob = new Object();rnrn public void run() rnrn while (true) rn synchronized (ob) rn try rn Thread.sleep(10);rn catch (InterruptedException e) rn // TODO 自动生成的 catch 块rn e.printStackTrace();rnrn rn //if (i > 80) //1rn // break;rn System.out.println(Thread.currentThread().getName() + "--" + i++);rn if (i > 80) //2rn break;rnrn rnrn rnrn rnrn 如上面的代码,为什么把if语句放置在两个位置有不同的结果?(第一处运行结果正确,第二处错误)。任何时候,只有一个线程访问synchronize语句块,直到执行完该语句块。这里照说if语句在同步代码块里应该位置随意,怎么这里就有两种不同的结果? rn小白求解,希望大佬抽出时间解疑下,谢谢!
java synchronize 线程同步
当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。
【java】Synchronize关键字
package Synchronize; /** * 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。 * 另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块 * */ public class Test01 implements Runnable { public void run()
java线程学习(一):线程
在面试过程中,我相信大家都被问到过线程的问题,在网上看了一下,知识很分散,我想在自己学习的时候归纳总结写个笔记,希望帮助到自己的同时能帮助到大家。 线程的基本概念 进程:进程是指正在运行的程序。当一个程序进入内存运行,就变成了一个进程,进程是出于运行过程中的程序,并且具有一定的独立性。(例如使用电脑时,可以一边使用微信,一边使用QQ,一边打开网页。。。等等) 线程:线程是进程中的一个执行单元...
Java线程的学习_线程的控制
Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程的执行。join线程Thread提供了让一个线程等待另一个线程完成的方法——join()方法。在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,知道被join()方法加入的join线程执行完为止。 join()方法通常使用线程的程序调用,以将大问题划分为许多小问题,每个小问题分配一个线程,当所有的
Java线程的学习_线程与集合
线程不安全的集合ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都是线程不安全的,也就是说,当多个并发线程向这些集合中存、取元素时,就可能破坏这些集合的数据完整性。如果程序中有多个线程可能访问以上这些集合,就可以使用Collection提供的类方法把这些集合包装成线程安全的集合。static <T> Collection<T> synchro
java线程学习之线程的开启
线程开启(and命名): // 线程1 Thread myThread = new Thread(&quot;threadNo1&quot;){ public void run(){ System.out.println(&quot;线程No1&quot;); } }; //线程2 MyThread mt = new MyThread(); ...
Java线程学习——线程的创建
线程的创建 线程:利用CPU的资源,让一个程序“同时”运行多个功能;举例: public class A{ public void s1(){ if (true) System.out.println(&amp;amp;quot;大家好&amp;amp;quot;); } public void s2(){ if(true){ System.out.println(&amp;amp;quot;不会&amp;amp;quot;); } } publ
关于异步、线程学习的问题
哪本书有启发性的讲什么完成端口、POLL和多线程呢?rn有的时候,编程过程中该用异步的地方却没有用,缺少哪方面的知识呢?
Java线程入门,学习Java线程的好帮手
Java线程入门,学习Java线程的好帮手
在线程中操作 ADOQUERY 是否需要Synchronize
form1.ADOConnection3.close;rn sa:=ExtractFilePath(ParamStr(0))+'table\'+form1.stringgrid4.cells[0,ix]+' access\'+'shuju.mdb';rn form1.ADOConnection3.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+sa;rn form1.ADOConnection3.Open;rn ss3:=ExtractFilePath(ParamStr(0))+ Z\'+form1.stringgrid4.cells[0,ix];rn sql:= 'INSERT INTO B ';rn sql:=sql+'SELECT * From [Text;DATABASE='+ss3+'].['+ss4+']';rnrn form1.ADOQuery3.SQL.Clear;rn form1.ADOQuery3.SQL.Add(sql);rn form1.ADOQuery3.ExecSQL;rnrn-------rn请问以上 代码 是否需要 Synchronize 呢?
Synchronize()是在调用新线程的方法?
Unit ThrdUrnrninterfacernrnuses classes;rnrntypern TTestThread=class(TThread)rn privatern answer:integer;rn protectedrn procedure GiveAnswer;rn procedure Execute;override;rn end;rnrnimplementationrn... ...rn请问:如果我创建一个TTestThread的实例,系统必然马上调用Execute,然后我又调用Synchronize(GiveAnswer),rn 是不是“又”创建了一个新的线程,Synchronize是在调用新线程的方法?
关于JAVA线程问题,线程的理解
一个时钟程序为什么要用多线程?rn像下面的代码理论上应该可以吧?为什么不能达到预期的效果?rn应该怎么样理解多线程?在什么地方用?rnrnrn时钟代码如下:rnrnrnimport java.applet.Applet;rnimport java.awt.Graphics;rnimport java.util.Date;rnrnrn//这个是正常的rn//public class ClockApplet extends Applet implements Runnable rn// private Thread clockThread = null;rn//rn// public void start() rn// if (clockThread == null) rn// clockThread = new Thread(this);rn// clockThread.start();rn// rn// rn//rn// public void paint(Graphics g) rn// Date date = new Date();rn// g.drawString(date.toString(), 5, 10);rn// rn//rn// public void run() rn// while (true) rn// repaint();rn// try rn// Thread.sleep(1000);rn// catch (InterruptedException e) rn// rn// rn// rn//rnrnrn//这个是我写的rnpublic class ClockApplet extends Applet rn public ClockApplet() rn // TODOAuto-generated constructor stubrn rnrn public void start() rn // TODO Auto-generated method stub super.start();rn test();rn rnrn public void paint(Graphics g) rn // TODO Auto-generated method stubrn System.out.println("paint(Graphics g) is running....");rn Date date = new Date();rn g.drawString("当前时间是: " + date.toString(), 5, 10);rn rnrn public void test() rn do rn System.out.println("test()-------while------start........");rn repaint();rn try rn Thread.sleep(3000);rn catch (InterruptedException e) rn rn while (true);rn rnrn
关于JAVA中线程嵌套线程的问题?
需求:rn我从页面拿到两个数组,然后把这两个数组传入多线程中,在线程两个数组循环嵌套,里面的循环,每循环一次产生一个新的线程。但是外层每循环一次都必须等待里面的循环线程执行完闭后才能进行下一循环。就是这样。rnrn我目前的状况:rn就是无法判断里面的循环线程是否都执行完闭,写出来之后还是一直运行。rn我现在的思路是里面的循环每产生一个我会定义好一个名称,然后放在数组中,在第一个循环中判断这些数组中的线程是否死亡。好像我写的代码没有控制好。所以一直在运行。rn还请高手帮帮小弟rn注:上文有可能描述的不是很明白还请见谅。rn谢谢!rnrn我的代码如下:rn[code=Java]rnpublic class TestThread rnrn /**rn * @param argsrn */rn public static void main(String[] args) rn //首先定义两个数组rn String [] arrTimes = "2010-01-01","2010-02-01","2010-03-01","2010-04-01";rn String [] arrFiles = "file1 A","file2 B","file3 C","file3 D";rn Thread t = new Thread(new ThreadRunJob(arrTimes,arrFiles));rn t.start();rnrn rnrnrnrnrnpublic class ThreadRunJob implements Runnablern rn private String [] arrTime;rn private String[] arrFiles;rn rn public ThreadRunJob() rn rn rn public ThreadRunJob(String [] arrTime,String[] arrFiles) rn this.arrFiles = arrFiles;rn this.arrTime = arrTime;rn rn rn public void run() rn int timeLen = arrTime.length;rn int fileLen = arrFiles.length;rn String [] threadNames = new String[fileLen];rn if(timeLen>0)rn for(int i=0;i0)rn for(int j=0;j vector = new Vector();rn for(int i=0;i
在dll中怎么实现线程的同步(Synchronize)
在dll中怎么实现线程的同步(Synchronize),我编写了一个同步方法,但是在dll中不能实现,请高手指导一下////谢拉(分可以加)
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法