「java线程调用线程」java线程调用方法

博主:adminadmin 2023-01-03 06:39:08 866

本篇文章给大家谈谈java线程调用线程,以及java线程调用方法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java多线程有哪些状态?

初始态:一个线程调用了new方法之后,并在调用start方法之前的所处状态。

就绪:一旦线程调用了start 方法,线程就转到Runnable 状态。

阻塞/ NonRunnable:线程处于阻塞/NonRunnable状态,这是由两种可能性造成的:要么是因挂起而暂停的,要么是由于某些原因而阻塞的,例如包括等待IO请求的完成。

停止/退出:线程转到退出状态,这有两种可能性,要么是run方法执行结束,要么是调用了stop方法。

Java多线程实现异步调用

在JAVA平台 实现异步调用的角色有如下三个角色:调用者 提货单 真实数据一个调用者在调用耗时操作 不能立即返回数据时 先返回一个提货单 然后在过一断时间后凭提货单来获取真正的数据 去蛋糕店买蛋糕 不需要等蛋糕做出来(假设现做要很长时间) 只需要领个提货单就可以了(去干别的事情) 等到蛋糕做好了 再拿提货单取蛋糕就可以了 public class Main { public static void main(String[] args) {

System out println( main BEGIN );

Host host = new Host();

Data data = host request( A );

Data data = host request( B );

Data data = host request( C );

System out println( main otherJob BEGIN );

try {

Thread sleep( );

} catch (InterruptedException e) {

}

System out println( main otherJob END );

System out println( data = + data getContent());

System out println( data = + data getContent());

System out println( data = + data getContent());

System out println( main END );

}

}

这里的main类就相当于 顾客 host就相当于 蛋糕店 顾客向 蛋糕店 定蛋糕就相当于 发请求request 返回的数据data是FutureData的实例 就相当于提货单 而不是真正的 蛋糕 在过一段时间后(sleep一段时间后) 调用data getContent() 也就是拿提货单获取执行结果

下面来看一下 顾客定蛋糕后 蛋糕店做了什么

public class Host {

public Data request(final int count final char c) {

System out println( request( + count + + c + ) BEGIN );

// ( ) 建立FutureData的实体

final FutureData future = new FutureData();

// ( ) 为了建立RealData的实体 启动新的线程

new Thread() {

public void run() {

//在匿名内部类中使用count future c

RealData realdata = new RealData(count c);

future setRealData(realdata);

}

} start();

System out println( request( + count + + c + ) END );

// ( ) 取回FutureData实体 作为传回值

return future;

}

}

host( 蛋糕店 )在接到请求后 先生成了 提货单 FutureData的实例future 然后命令 蛋糕师傅 RealData去做蛋糕 realdata相当于起个线程去做蛋糕了 然后host返回给顾客的仅仅是 提货单 future 而不是蛋糕 当蛋糕做好后 蛋糕师傅才能给对应的 提货单 蛋糕 也就是future setRealData(realdata)

下面来看看蛋糕师傅是怎么做蛋糕的

建立一个字符串 包含count个c字符 为了表现出犯法需要花费一些时间 使用了sleep

public class RealData implements Data { private final String content;

public RealData(int count char c) {

System out println( making RealData( + count + + c + ) BEGIN );

char[] buffer = new char[count];

for (int i = ; i count; i++) {

buffer[i] = c;

try {

Thread sleep( );

} catch (InterruptedException e) {

}

}

System out println( making RealData( + count + + c + ) END );

ntent = new String(buffer);

}

public String getContent() {

return content;

}

}

现在来看看 提货单 future是怎么与蛋糕 content 对应的:

public class FutureData implements Data { private RealData realdata = null;

private boolean ready = false;

public synchronized void setRealData(RealData realdata) {

if (ready) {

return; // 防止setRealData被调用两次以上

}

this realdata = realdata;

this ready = true;

notifyAll();

}

public synchronized String getContent() {

while (!ready) {

try {

wait();

} catch (InterruptedException e) {

}

}

return realdata getContent();

}

}

顾客做完自己的事情后 会拿着自己的 提货单 来取蛋糕

System out println( data = + data getContent());

这时候如果蛋糕没做好 就只好等了

while (!ready) { try {

wait();

} catch (InterruptedException e) {

}

//等做好后才能取到

return realdata getContent();

程序分析

对于每个请求 host都会生成一个线程 这个线程负责生成顾客需要的 蛋糕 在等待一段时间以后 如果蛋糕还没有做好 顾客还必须等待 直到 蛋糕被做好 也就是

future setRealData(realdata); 执行以后 顾客才能拿走蛋糕

每个线程只是专门负责制作特定顾客所需要的 蛋糕 也就是顾客A对应着蛋糕师傅A 顾客B对应着蛋糕师傅B 即使顾客B的蛋糕被先做好了 顾客A也只能等待蛋糕师傅A把蛋糕做好 换句话说 顾客之间没有竞争关系

lishixinzhi/Article/program/Java/gj/201311/27425

Java线程的知识要点?

一、进程的概念

进程表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并给它分配资源,包括内存空间、磁盘空间、I/O设备等。然后,把该进程放入就绪队列。进程调度程序选中它,为它分配CPU以及其他有关的资源,该进程才真正运行。所以,云南电脑培训发现进程是系统中的并发执行的单位。

二、线程的概念

线程:(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

三、引用线程的优势

(1)易于调度。

(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分或相同部分。

(3)开销少。创建线程比创建进程要快,所需开销很少。

(4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。

四、进程与线程的关系

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。

(3)处理机分给线程,即真正在处理机上运行的是线程。

(4)线程在执行过程中,要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

简单来说:

1、一个程序至少有一个进程,一个进程至少有一个线程。

2、进程在执行过程中拥有独立的资源,而多个线程共享进程中的资源。

Java线程怎样使用?

多进程是指操作系统能同时运行多个任务(程序),多线程是指在同一程序中有多个顺序流在执行。

在java中创建一个线程有两种方法: 

package com.thread;

public class ThreadTest1 {

    public static void main(String[] args) {

        Runnable1 r = new Runnable1();

        //r.run();并不是线程开启,而是简单的方法调用

        Thread t = new Thread(r);//创建线程

        //t.run(); //如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

        t.start(); //线程开启

        for (int i = 0; i  100; i++) {

            System.out.println("main:"+i);

        }

    }

}

class Runnable1 implements Runnable{

    public void run() {

        for (int i = 0; i  100; i++) {

            System.out.println("Thread-----:"+i);

        }

    }

}

java多线程调用同步方法时,休眠后代码为什么执行不到

1、java多线程调用同步方法时主程序或者后台服务Service程序两者必须有一个正在运行着,定时任务才会执行。

2、自动执行的任务可以设置开启或关闭定时,检查任务的这一开关处于开启状态。

3、源目录在定时的时间点如果没有变化,任务执行后不会留下日志,通过查看任务的最后执行时间确定任务到底执行了没有。

4、执行失败和没有执行不是同一回事,如果是执行失败则要分析失败原因。这是java多线程调用同步方法时,休眠后代码执行不到的原因。

java线程调用线程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java线程调用方法、java线程调用线程的信息别忘了在本站进行查找喔。