问个多线程的问题 线程类里是一个循环 我如果开5个线程访问这个线程类 只能一个线程走完里面的循环才会进行第二个线程 问如何用多线程解决这个问题 我的目的是5个线程一起进到线程类里去一起完成这个循环 并且不会把循环的顺序搞乱 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看你需要如果是一段代码要同步给代码加锁如果是方法给方法加。。class test1{ private static final Object Lock = new Object(); public void fun1() { // do somthing synchronized(Lock){ // 同步代码 } } // 同步方法 public synchronized void fun2() { // 同步代码 }} 真的不太理解,用同步锁锁住当前对象,将循环放在同步锁内可不可以?synchronized(this){for(){}} 用mina 框架或者是nio就可以解决你的问题或者Socket 用线程池eg:Executer exec = Executors.newFixed……(线程池的数量)然后用exec.execute(执行你逻辑线程) 好难理解阿,“线程类里是一个循环 我如果开5个线程访问这个线程类 只能一个线程走完里面的循环才会进行第二个线程”这个话本来就是错的,谁说只能一个线程走完才会进行第2个,除非加了锁,或者用了join()“我的目的是5个线程一起进到线程类里去一起完成这个循环 并且不会把循环的顺序搞乱”这话是什么意思呢?又要不把顺序搞坏,又要一起完成循环,单cpu执行线程本来就只能一个一个执行,什么叫一起完成阿? 真是太巧了,我刚编好下面的代码,lz就提出相同的问题了。试试看吧~~!import java.lang.Thread;public class ThreadClass { public static void main(String[] args) { try { InThreadClass t = new InThreadClass(); for (int i = 0; i < 5; i++) { new Thread(t).start(); } } catch (Exception e) { } System.out.println("over!!"); }}class InThreadClass extends Thread { private int _I = 0; String str = new String(); public void run() { try { while (true) { synchronized (str) { if (_I > 1000) { break; } sleep(0); System.out .println(currentThread().getName() + " : Thread" + _I++); } } } catch (InterruptedException e) { } }} 如果出现楼主你说的那个现象,有四种可能:1.你的线程的run方法加锁了。2.你的run方法很快就运行完了,等不到后面的线程启动。所以你感觉是后面的线程等待前面的线程结束后才执行。3.你后面的线程wait前面的线程。4.你设置了线程的优先级。我感觉,除此以外好像没别的了。 public void run() {try {while (chinese wholesalers) {synchronized (str) {if (_I > 1000) {break; LZ认为多线程CPU效率比较高 目前我理解的就是。。一个可以使用锁定。第二个可以用sleep的大小来实现 这个建议很不错 mina这个框架很强大啊 java数字顺时针螺旋矩阵 好久没来提问了,今天提问个多线程编程的问题 高手新手一起板砖鸡蛋砸过来 怎样创建Instance,这个Class类型是由string表示动态的。 请问:think in java 与 java 核心技术I、II 应该选哪一本呢? 几个小问题请教 也来谈Java集合框架[原创] 请前辈们指教 利用一只灯泡,就找出了 Java 和 .Net 虚拟机上安全问题 java 如何调用 COM对象 或WIN API(给提示的有分) 已经失望透顶了 环境变量的选择问题 及 引用第三方开发包 JSP或Java调用Httpclient抓取网页,如何判断抓取完毕?
如果是一段代码要同步给代码加锁
如果是方法给方法加。。class test1{
private static final Object Lock = new Object();
public void fun1() {
// do somthing
synchronized(Lock){
// 同步代码
}
} // 同步方法
public synchronized void fun2() {
// 同步代码
}
}
用同步锁锁住当前对象,将循环放在同步锁内可不可以?
synchronized(this)
{
for(){
}
}
好难理解阿,
“线程类里是一个循环 我如果开5个线程访问这个线程类 只能一个线程走完里面的循环才会进行第二个线程”
这个话本来就是错的,谁说只能一个线程走完才会进行第2个,除非加了锁,或者用了join()
“我的目的是5个线程一起进到线程类里去一起完成这个循环 并且不会把循环的顺序搞乱”
这话是什么意思呢?又要不把顺序搞坏,又要一起完成循环,单cpu执行线程本来就只能一个一个执行,什么叫一起完成阿?
试试看吧~~!import java.lang.Thread;public class ThreadClass { public static void main(String[] args) {
try {
InThreadClass t = new InThreadClass();
for (int i = 0; i < 5; i++) {
new Thread(t).start();
}
} catch (Exception e) {
}
System.out.println("over!!");
}
}class InThreadClass extends Thread { private int _I = 0;
String str = new String(); public void run() {
try {
while (true) {
synchronized (str) {
if (_I > 1000) {
break;
}
sleep(0);
System.out
.println(currentThread().getName() + " : Thread" + _I++);
}
}
} catch (InterruptedException e) {
}
}
}
1.你的线程的run方法加锁了。
2.你的run方法很快就运行完了,等不到后面的线程启动。所以你感觉是后面的线程等待前面的线程结束后才执行。
3.你后面的线程wait前面的线程。
4.你设置了线程的优先级。
我感觉,除此以外好像没别的了。
try {
while (chinese wholesalers) {
synchronized (str) {
if (_I > 1000) {
break;
LZ认为多线程CPU效率比较高