问个线程的问题

charlesxu 2014-12-16 05:50:55
代码如下,Function_001里新建了一个Thread_02,并且在synchronized里start了。那是不是应该不等这个子线程执行完,就执行if(tmp.equals("abc"))呢?

可是我跟了遍程序,tmp得到值以后才进入下一行判断是否等于abc的。别人的程序我拿来改的,我觉得主线程里新建了子线程。子线程和主线程就分开了,各干各的了。

我还不明白他为什么在Function001里新建了个线程?Thread_01里建了个Socket,然后在Function001的子线程里从Socket中读值。Thread_01是在Socket监听到连接后建立的Thread,所以可能有几个客户端同时访问服务器,就会建立多个Thread_01。那么建这个Thread_02是不是防止多个Thread_01同时访问Socket呢?可是每个Thread_01不都是有独立的内存空间吗?客户端的IP和Port都不同,Socket也不同,Client应该不会访问到其他Client建立的Socket吧?


SSLSocket s = (SSLSocket) serverSocket.accept();
Thread_01 t1 = new Thread_01();
//Thread_01是在Socket监听到连接后建立的Thread



class Thread_01 extends Thread{
InputStread bis = socket.getInputStream();

private String Function_002(){
Strign tmp = Function_001();
if(tmp.equals("abc")){
//Function001里新建了一个Thread_02,并且在synchronized里start了
//那是不是应该不等这个子Thread_02执行完,就执行if(tmp.equals("abc"))呢?
}
}

private String Function_001(){
String result;
Thread Thread_02 = new Thread() {
@Override
public void run() {
try {
while (result=bis.readLine()==null);
//这是从Thread_01里已经建立的Socket里读值,读到值后才推出while循环。
}catch (IOException e) {
e.printStackTrace();
}
synchronized (lock) {
lock.notifyAll();
}
}
}
try {
synchronized (lock) {
thread_02.start();
lock.wait(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return result;
}
}
...全文
256 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
乔不思 2014-12-30
  • 打赏
  • 举报
回复
Function_002开启了Function_001的Thread-02线程,只是开启而已,相当于现在存在两个线程 一个就是执行 function-002的线程和thread-02线程 两个互不影响,互不干涉
Intboy 2014-12-25
  • 打赏
  • 举报
回复
引用 2 楼 charlesxu 的回复:
[quote=引用 1 楼 fengspg 的回复:] 没大懂你说的
这个里面涉及的知识面比较多,不只是关于一条语句的。 基本的问题就是为啥Function_001里要用线程?这个线程里有个while循环从Socket的流里读值,值读出来了就结束。 40分啊,来者有份啊!!![/quote] 主线程里面使用子线程的目的就是迅速相应请求,就像你去寄快递,只要寄出去了快递公司就告诉你OK了,但是怎么运送,什么时候收到就是另外一回事儿了。
林子来秀 2014-12-18
  • 打赏
  • 举报
回复
据我所知,线程启动后,就执行接下来的语句啦.是与线程同步的~ 你可以用获取时间来查看查看.结尾时间分别放在run方法外面,与run方法里面.看看各自需要多少时间吧~
charlesxu 2014-12-17
  • 打赏
  • 举报
回复
下面代码里Thread_02.start();放到了synchronized里,但是synchronized为什么不得到this这个锁?而要新生成一个对象lock,然后得到这个锁呢?既然这个wiat是为了让Thread_01等待,直到Thread_02执行完成,那不就应该让synchronized得到this这个锁吗?难道在Thread_01里生成的任何对象作为synchronized的锁,都可以锁定Thread_01吗?

    private String Function_001(){
        final Object lock = new Object();
        String result;
        Thread Thread_02 = new Thread() {
            @Override
            public void run() {
                try {
                    while (result=bis.readLine()==null);
                    //这是从Thread_01里已经建立的Socket里读值,读到值后才推出while循环。
                }catch (IOException e) {
                    e.printStackTrace();
                }
                synchronized (lock) {
                    lock.notifyAll();
                }
           }
        }
        try {
            synchronized (lock) {
                thread_02.start();
                lock.wait(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return result;
    }    
charlesxu 2014-12-17
  • 打赏
  • 举报
回复
或者一步一步的问吧,请问lock.wait(1000);是锁定Thread_02还是Thread_01?
charlesxu 2014-12-17
  • 打赏
  • 举报
回复
引用 1 楼 fengspg 的回复:
没大懂你说的
这个里面涉及的知识面比较多,不只是关于一条语句的。 基本的问题就是为啥Function_001里要用线程?这个线程里有个while循环从Socket的流里读值,值读出来了就结束。 40分啊,来者有份啊!!!
Intboy 2014-12-16
  • 打赏
  • 举报
回复
没大懂你说的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧