z****e 发帖数: 54598 | 1
最简单的就是自己写一个MyThread extends Thread
然后main函数里面:
MyThread myThread = new MyThread();
myThread.start();
多个的话
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
就启动了两个线程并发处理了 |
|
b***i 发帖数: 3043 | 2 谢谢,看了大家的回复,看来有希望。
我要做的是这么一件事情。我拿到一个项目的源代码,整个项目实现有好几十个类,其
中具体操作的实现里面有几百个函数,其中大约10几个是有关访问网页的,其他的是计
算。中间嵌套调用很多。举个例子,比如,读网页,分析网页,这些都是有一个共用的
变量来记录现在的状态的。这个项目只能读写一个网页。
我想把多线程加进去,比如一个线程读一个网页,另一个可以读另一个。但是,我现在
有一个static的控制变量,如果一个线程改了该网页的状态,如成功与否,是否再试一
次,网页内容多少,另一个就发现也改了。
怎么做呢?我想的就是生成多个控制变量数组,或者每个线程动态生成这个控制变量,
把这个变量
传入相关的每一个函数。有180多个。
另一个办法,是不用改180个函数的定义,而是在每个具体相关的函数(大约10个)需
要首先获得当前线程的id,然后在控制变量的数组里面取出这个线程对应的那个控制变
量。这个只要保证线程id不超过100个,我数组先定义个1000这么大。
本质上,是每个线程运行的时候,从线程堆栈里找出线程的唯一的标志信息,然后取得
和该线程对应的控制变量。这个变量是... 阅读全帖 |
|
t*******2 发帖数: 182 | 3 一老印,电面迟到15分钟,打过来也不花两分钟介绍一下team之类的,直接上题。。
1) Can you explain dependency injection with an example, in java.
我一下子懵了,听都没听说过这个东西,什么也扯不出来,只好老实承认没听说过。。
事后google了一下,好像是Spring framework里面的一个概念。。
2) Can you create memory leak with a sample program.
也是完全没准备过,想了两分钟想不出什么来,老印直接开始问下题
3) What do you think is the output of this sample program
public class MyThread implements Runnable {
String myString = "Yes ";
public void run() {
this.myString = "No ";
}
public static void main(String[] args) {
MyThread t ... 阅读全帖 |
|
f*******t 发帖数: 7549 | 4 大家来测试一下到底多少个Yes和No吧。加不加volatile关键字对结果有影响哦!
public class MyThread implements Runnable {
volatile String myString = "Yes";
public void run() {
this.myString = "No";
}
public static void main(String[] args) {
AtomicInteger[][] counts = new AtomicInteger[10][2];
for (int i = 0; i < 10; i++)
for (int j = 0; j < 2; j++)
counts[i][j] = new AtomicInteger(0);
Thread[] threads = new Thread[1000];
for (int i = 0; i < 10... 阅读全帖 |
|
a**********0 发帖数: 422 | 5 看到有的网友对这个概念比较糊涂 我把我写的代码放上来大家看看 都挺简单的
如何开拓一个新thread 和它的driver程序
package jc;
import java.util.*;
public class NewThreadOne extends Thread {
LinkedList myLinkedList = new LinkedList();
// Optional: a constructor which contains this.start()
// if there is no constructor or there is no this.start(), then have to
manually threadName.start()
//Must override run(): inside run() can put a flag which can stop the
thread
@Override
public void run(){
myLinkedList.add... 阅读全帖 |
|
l**********r 发帖数: 4612 | 6 【 以下文字转载自 JobHunting 讨论区 】
发信人: tarotaro2 (taro), 信区: JobHunting
标 题: 上个Yahoo电面面经, 给恶心坏了。。
发信站: BBS 未名空间站 (Thu Sep 12 14:33:48 2013, 美东)
一老印,电面迟到15分钟,打过来也不花两分钟介绍一下team之类的,直接上题。。
1) Can you explain dependency injection with an example, in java.
我一下子懵了,听都没听说过这个东西,什么也扯不出来,只好老实承认没听说过。。
事后google了一下,好像是Spring framework里面的一个概念。。
2) Can you create memory leak with a sample program.
也是完全没准备过,想了两分钟想不出什么来,老印直接开始问下题
3) What do you think is the output of this sample program
public class MyThread implements ... 阅读全帖 |
|
n*m 发帖数: 23 | 7
It is much similar to asynchronous call (may be I should say the same)
I've said, create your own runnable. Also, I suggest you can have your own
thread pool
public interface MyRunnable {
public int run ();
}
or
public class MyThread {
private Thread thread;
public int run () {
thread = new Thread();
thread.start();
...
return something;
}
}
...
MyThread mt = new MyThread ();
int result = mt.run();
wrap Thread running function in the implementation of |
|
I******y 发帖数: 176 | 8 design a class which provides a lock only if there are no possible deadlocks
解答并没有给出到底什么时候可以acquire lock阿.这个canAcquireResource具体怎么
实现呢
For our solution, we implement a wait / die deadlock prevention scheme.
1 class MyThread extends Thread {
2 long time;
3 ArrayList res = new ArrayList();
4 public ArrayList getRes() { return res; }
5
6 public void run() {
7 /*run infinitely*/
8 time = System.currentTimeMillis();
9 int count = 0;
10 while (true) {
11 if (count < 4) {
... 阅读全帖 |
|
l***y 发帖数: 4671 | 9 用 perl 开一个多线程,每个线程分别实时逐行报告状态,想既在屏幕上显示,又同时
分别输入到 log 文件中去。咋整涅?
狗了很多,最接近的办法是在线程里写:
sub mythread ($){
...
my $rc = system("myprogram blah blah blah | tee LOG_$_[0].txt");
...
}
这个方法的问题是没法实时逐行在屏幕上显示,而是把 myprogram 的输出分三次显示
出来。。。
为啥会分三次涅?。。。俺的c++ 程序里的输出命令都是 printf 啊,分别在三个
loops 里。大约长相是:
第一个循环 A:
if (dbg_parameter){
printf("\n\33[32;40m Parameters got from file "%s": \33[0m \n", sParFile.c
_str());
for (map::iterator it = p.begin(); it != p.end(); it++)
printf("\tp["%s"]... 阅读全帖 |
|
c*****t 发帖数: 1879 | 10 Well, in Java you need to do
Runnable myRunnable = new Runable () { ... };
Thread myThread = new Theaqd (myRunnable);
myThread.start ();
Simply creating Runnable object (myRunnable) does not create a new
thread.
Synchronizations etc are a whole new set issues. |
|
w*******e 发帖数: 285 | 11 我原来的一个简单的tcpserver是每次有连接就创建一个新的thread,就像这样
Socket connectionSocket = serverSocket.accept();
new myThread(connectionSocket, CoreDB).start();
现在想改成threadpool,本来想自己写,但是发现有一个非常简单的
ThreadPoolExecutor,用起来就象这样
Socket connectionSocket = serverSocket.accept();
threadPoolExecutor.execute(new myThread(connectionSocket));
help里面说ThreadPoolExecutor有最小count和max count,thread数量低于min count的
时候每次都创建新的thread,在min count和max count之间只有queue满的时候才会创建
新的thread,如果已经达到max count而且queue也满了就会转给rejecthandler.
我不太理解的是概念上的问题,我的 |
|
A*******e 发帖数: 2419 | 12 std::thread mythread([]() {
do_sth();
do_sth_else();
});
觉得不如单独声明好懂啊。
auto callable = []() {
...
}
std::thread mythread(callable); |
|
c*********e 发帖数: 16335 | 13 final public class MyThread extends Runnable{
private final int id;
public MyThread (int idd, DifferentClass dc) {
this.id= idd;
//setFunction's business logic here:
}
@override
public void run(){
dc.dosomething();
}
} |
|
T*****e 发帖数: 361 | 14 如果dc.dosomething()的呼叫线程是MyThread或者它的子类,直接吧当前线程cast成
MyThread就能拿到id了吧。 |
|
T*****e 发帖数: 361 | 15 看上去是MyThread中定义的id啊,他都可以支持传进来的。不直接传可能是避免参数变
动导致的修改吧。
如果只是一般意义上的线程id,那跟MyThread的实现一毛钱关系都没有。 |
|
b***i 发帖数: 3043 | 16 看了一下,似乎这个就是我最终想要的。
就是说,在我自己实现了Runnable的类里面定义一个static变量
class MyThread implements Runnable{
ThreadLocal myControl...
public void run(){
call other class, other functions
}
...
}
class Other {
public void dosomething(){// without passing in any parameter
MyThread.myControl...就可以访问该线程所拥有的那个Control,而不是所有线程
共有一个。
虽然在语法上是static变量,但是其实是线程相关的。当然,也可能需要通过函数访
问,不是直接访问这个变量。
} |
|
n*m 发帖数: 23 | 17
It can be calculated in the new thread. My sample is a typical asynchronous
call. So, you may get invalid value from the call since the new thread may not
finish.
However, there are many ways to get a "correct" value. Here is a sample
public class MyValue {
boolean ready=false;
int realvalue;
public boolean getReady() {
return ready;
}
public void setReady (boolean ready) {
this.ready = ready;
}
}
...
MainThread:
MyValue returnValue = myThread.run();
while |
|
I*******e 发帖数: 1879 | 18 ☆─────────────────────────────────────☆
chgdragon (cplusmad) 于 (Thu Apr 5 20:57:16 2007) 提到:
Implement a lock object in Java that takes thread priority into
consideration.
Assume that all threads in the system are subclasses
of MyThread. We want to define a Lock class so that
other parts of the program can use this class to
protect critical sections:
Lock lock;
....
lock.lock();
.... // synchronized code
lock.unlock();
The special requirement for Lock is that, regardles |
|
b***i 发帖数: 3043 | 19 主要是Java,也可以应用在其他语言:
我自己定义一个线程的类,然后定义一些实例,这些实例有些基本的变量的值是不同的
,比如
public class MyThread extends Runnable{
int id;
public void setID(int idd){id=idd;}
public void setFunction(DifferentClass dc);
...
public void run(){
dc.dosomething();
}
}
然后我想在dc.dosomething这个函数里面取得呼叫它的线程的信息:id,除了在run里
面吧这个传入dc.dosomething(id)外,还有什么别的办法?
我问这个主要因为这个程序的调用已经有几百个函数这么写了。要改还有点麻烦,也不
确定我就能全部搞定。怎么简单点可以把线程的基本信息告诉非常深入的子程序呢? |
|
c*********e 发帖数: 16335 | 20 lz说的id,到底是指thread的id,还是myThread中的id这个属性? |
|
b***i 发帖数: 3043 | 21 我写了一个线程播放midi,函数输入是一个字符串,里面告诉我要弹什么键。所以我一
边播放,一遍调用Thread.sleep(200)来等待。每次sleep会后,我要看一个变量是否被
UI线程设置了,如果设置了,就退出这个线程。否则,我继续等待,直到这个音符结束
,然后我播放下一个音符。
另一个办法是不是interrupt?这个是怎么用的?UI直接调用mythread.interrupt?
以上是有sleep的线程,所以我怎么着都可以退出。如果是大量计算的线程,是不是就
只能不停查询变量才能退出啦? |
|