您的位置:首页 > 编程语言 > Java开发

JavaSe基础XX15——线程_1

2014-08-24 00:28 239 查看
线程是Java语言支持的。并不是所有语言都支持多线程。

01-多线程(概述)

进程:正在执行的程序。

线程:控制单元、执行路径。就是进程中一个负责程序执行的控制单元,也就执行路径。

一个进程必须有线程。一个进程中可以有多个执行路径,叫做多线程。

线程是为了执行代码,想多部分代码同时执行的时候,就需要多线程了。

开启多个线程,是为了多部分代码。

每一个线程都有自己独立的运行内容,这个内容称为线程要执行的任务。

02-多线程(好处与弊端)

CPU在程序切换运行的时候,分配给程序的时间不是固定的。执行程序中线程也不是固定的。切换是随机的,时间片。

当开启多个程序的时候,程序被CPU访问的频率就低了。

比如,开copy的时候,开启另一个程序,那么copy时间就会变长了。怎么解决呢?

所以,多线程的好处是能够同时执行多个程序。

弊端就是降低了效率。



03-多线程(JVM中的多线程解析)

<pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">/*JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。</span>
1,执行main函数的线程,该线程的任务代码都定义在main函数中。2,负责垃圾回收的线程。*/class Demo extends Object{public void finalize(){System.out.println("demo ok");}}class ThreadDemo{public static void main(String[] args) {new Demo();new Demo();new Demo();System.gc();System.out.println("Hello
World!");}}









注意输出的顺序,说明了是由两个线程在运行。

另一种情况:



问题:主线程结束了,虚拟机不一定就会结束。因为可能还会有其他线程在运行。

04-多线程(主线程运行示例)

主线程和垃圾回收机制

CPU什么时候会执行垃圾回收程序呢?

首先CPU会先判断堆内存的大小,如果太大就会执行,释放。

以后就重点关心主线程了。







如何实现小强和旺财能同时进行?

05-多线程(多线程创建的方式一-继承Thread类)





如何创建一个线程?

方法1.

声明一个类继承Thread。复写里面的run方法。创建线程对象。

问:为什么非得要复写里面的run方法?

/*
创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行。

而运行的指定代码就是这个执行路径的任务。

jvm创建的主线程的任务都定义在了主函数中。

而自定义的线程它的任务在哪儿呢?
Thread类用于描述线程,线程是需要任务的。所以Thread类也对任务的描述。
这个任务就通过Thread类中的run方法来体现。也就是说,run方法就是封装自定义线程运行任务的函数。

run方法中定义就是线程要运行的任务代码。

开启线程是为了运行指定代码,所以只有继承Thread类,并复写run方法。
将运行的代码定义在run方法中即可。

*/


/*
如何创建一个线程呢?

创建线程方式一:继承Thread类。

步骤:
1,定义一个类继承Thread类。
2,覆盖Thread类中的run方法。
3,直接创建Thread的子类对象创建线程。
4,调用start方法开启线程并调用线程的任务run方法执行。

可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)

主线程的名字就是main。
*/

class Demo extends Thread
{
private String name;
Demo(String name)
{
super(name);
//this.name = name;
}
public void run()
{
for(int x=0; x<10; x++)
{
//for(int y=-9999999; y<999999999; y++){}
System.out.println(name+"....x="+x+".....name="+Thread.currentThread().getName());
}
}
}

class ThreadDemo2
{
public static void main(String[] args)
{

/* 创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行。 而运行的指定代码就是这个执行路径的任务。 jvm创建的主线程的任务都定义在了主函数中。 而自定义的线程它的任务在哪儿呢? Thread类用于描述线程,线程是需要任务的。所以Thread类也对任务的描述。 这个任务就通过Thread类中的run方法来体现。也就是说,run方法就是封装自定义线程运行任务的函数。 run方法中定义就是线程要运行的任务代码。 开启线程是为了运行指定代码,所以只有继承Thread类,并复写run方法。 将运行的代码定义在run方法中即可。 */
//
// Thread t1 = new Thread();

Demo d1 = new Demo("旺财");
Demo d2 = new Demo("xiaoqiang");
d1.start();//开启线程,调用run方法。

d2.start();
System.out.println("over...."+Thread.currentThread().getName());
}
}
//调用run和调用start有什么区别?




注意这个结果,若是调用run方法。输入才结果依旧。这和定义一个类,调用类中的方法一样,都是一个主线程在运行。

06-多线程(Thread类中的方法&线程名称)

可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)

主线程的名字就是main。













07-多线程(多线程运行图解)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: