java多线程有什么用 System.in的位置影响其他线程

一个进程就是在一个运行的程序它有自己独立的内存空间,一组系统资源每个进程的内部数据和状态都是独立的,例如在window是同时打开多个记事本虽然它们所运行的程序代码都是一样的,但是所使用的内存空间是独立的互不干扰。

线程与进程相似是一段完成某个特定功能的代码,是程序中单个顺序的流控制;但与进程不同的是同类的多个线程共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据以及一个供程序执行时使用的堆栈

1.3进程与线程的区别

1. 进程:每个进程都有独立的代码和数据空间(进程上下文) ,进程切换的开销大
2.
線程:轻量的进程,同一类线程共享代码和数据空间每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小
3.
多进程:在操作系统中,能同时运行多个任务程序
4.
多线程有什么用:在同一应用程序中,有多个顺序流同时执行

1.4线程创建的两种方式

采用继承Thread创建線程

该方法比较简单,主要是通过继承java.lang.Thread类并覆盖Thread类的run()方法来完成线成的创建。Thread 类是一个具体的类即不是抽象类,该类封装了线程嘚行为要创建一个线程,程序员必须创建一个从 Thread 类导出的新类Thread类中有两个最重要的函数run()start()

通过实现Runnable接口创建线程

该方法通过生成实現java.lang.Runnable接口的类该接口只定义了一个方法run(),所以必须在新类中实现它但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例這一点通过 Thread

2 单线程和多线程有什么用性能比较

以使用蒙特卡罗概率算法求π为例,进行单线程和多线程有什么用时间比较

2.1什么是蒙特卡罗概率算法

蒙特卡罗法Monte Carlo method)是以概率和统计的理论、方法为基础的一种计算方法,将所求解的问题同一定的概率模型相联系用电子计算机實现统计模拟或抽样,以获得问题的近似解故又称统计模拟法或统计试验法。 --百度百科

N取值为10000万多线程有什么用的数为100,每个线程执荇100万次模拟实验

    //随机产生一个在正方形区域的点判断它是否在圆中

根据运行结果看,由于多线程有什么用运行时要进行分配资源的操作在单机上的运行速度并没有单线程效率高。

}

实际上不论是使用哪一种方式实現最后调用时都是需要使用Thread类的start()方法进行调用。因此线程的主要类,我们研究Thread类即可

线程的状态state,在Thread类中以内部枚举的形式存在

BLOCKED, //阻塞状态等待获取锁进入代码块 WAITING, //等待状态,线程进入此状态只有三种方法:wait()、join()、park()注意这些方法都没有参数,即不会由于超时问题而重新變为可运行或执行状态
yield():当前线程暂停执行让出cpu,重新竞争有可能仍然是该线程竞争到cpu。
sleep(long):当前线程暂停执行(不释放锁)休眠指定毫秒数,其他线程竞争cpu当指定时间过去,当前线程继续执行
wait():令当前线程进入等待状态(释放锁),只能使用在synchronized块中因此,当线程执行wait方法的时候一定是取得了锁可以通过notify()或notifyAll()方法重新唤醒
join():通常是在一个线程t1里面调用另一个线程t2的join方法,当t1执行到这里的时候会获取t2的锁並执行t2,直到t2执行完毕再继续执行t1下面的步骤。
join(long):与join()类似不同处在于t1最多只会等待long秒,当时间到达后如果t2仍没有执行完毕,那么t1也會继续执行下面的步骤

如上程序,控制台会先打印m1线程的0-9然后再打印"---main---",最后打印m2线程的0-9.

需要注意的是join(0)不是等待0ms,而是等价于join()方法源码中join()内部只有一行代码:join(0)。

}

我要回帖

更多关于 多线程有什么用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信