------- android培训java培训、期待与您交流!
----------

多线程:

进程和线程:

进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。


线程:就是进程中的一个独立的控制单元。线程在控制着进程的执行。

一个进程中至少有一个线程。

主线程:

Java VM  启动的时候会有一个进程java.exe.该进程中至少一个线程负责java程序的执行。而且这个线程运行的代码存在于main方法中。该线程称之为主线程。


扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的线程。

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

步骤:

1.  定义类继承Thread,建立子类对象的同时线程也被创建。

2.  子类覆盖父类中的run方法,将线程运行的代码存放在run中。目的:将自定义代码存储在run方法。让线程运行。

3.  通过调用start方法开启线程。该方法有两个作用:启动线程,调用run( )方法。

多线程原理:

多个线程都获取cpu的执行权。cpu执行到谁,谁就运行。

明确一点,在某一个时刻,只能有一个程序在运行。(多核除外)

cpu在做着快速的切换,以达到看上去是同时运行的效果。我们可以形象把多线程的运行行为在互相抢夺cpu的执行权。 

这就是多线程的一个特性:随机性。谁抢到谁执行,至于执行多长,cpu说的算。

为什么要覆盖run方法?

Thread类用于描述线程。该类就定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。也就是说Thread类中的run方法,用于存储线程要运行的代码。

/**
*
* 此程序初步演示多线程的创建问题
* 主线程和两个多线程一起运行
* 1.继承Thread类
* 2.覆写run()方法
* 3.start()调用
*
*/
public class ThreadDemo
{
public static void main(String[] args)
{
//开启两个Demo线程
Demo d = new Demo("zhangsan");
Demo e = new Demo("lisi");
d.start();//启动线程,调用run()方法。
e.start(); //主线程运行,打印 main.1——1000的数
for (int i=1;i<=1000;i++)
{
System.out.println("main"+"."+i);
}
}
} //定义一个Demo类用于开启多线程,继承Thread
class Demo extends Thread
{
private String name;
Demo(String name)
{
this.name = name;
}
//函数功能,打印 名字。1——1000的数
public void run()
{
for (int i=1;i<=1000;i++)
{
System.out.println(name+"."+i);
}
}
}

经典卖票程序:

/**
*
* 用Thread来初步示例多线程卖票程序
* 4个窗口,同时卖100张票
*
*/
public class TicDemo
{
public static void main(String[] args)
{
//创建4个线程对象
Tic t1 = new Tic();
Tic t2 = new Tic();
Tic t3 = new Tic();
Tic t4 = new Tic(); //开启4个线程并且运行
t1.start();
t2.start();
t3.start();
t4.start();
}
} //声明一个类,继承Thread。
class Tic extends Thread
{
private static int tic = 100;//继承Thread方法下,共享100张票,要用静态。 public void run()
{
while (tic>0)
{
System.out.println(Thread.currentThread().getName()+"------"+tic--);
}
}
}

创建线程方式二:

实现Runnable接口

1.  定义类实现Runnable接口,将线程要运行的代码存放在该run方法中。

2.  子类覆盖接口中的run方法。

3.  通过Thread类创建线程对象。

4.  将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。

5.  调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

还是用卖票程序来演示:

/**
*
* 用Runnable来初步示例多线程卖票程序
* 4个窗口,同时卖100张票
*
*/
public class TicDemo
{
public static void main(String[] args)
{
//创建一个线程对象
Tic t = new Tic(); //创建4个线程,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t); //开启4个线程并且运行
t1.start();
t2.start();
t3.start();
t4.start();
}
} //声明一个类,实现Runnable接口
class Tic implements Runnable
{
private int tic = 100; public void run()
{
while (tic>0)
{
System.out.println(Thread.currentThread().getName()+"------"+tic--);
}
}
}

------- android培训java培训、期待与您交流!
----------

黑马程序员——JAVA基础之简述多线程,两种创建多线程的方式的更多相关文章

  1. 黑马程序员——JAVA基础之简述设计模式

    ------- android培训.java培训.期待与您交流! ---------- 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓 ...

  2. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  3. 黑马程序员——JAVA基础之简述 类的封装

    ------- android培训.java培训.期待与您交流! ---------- 类的封装(Encapsulation)  封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 封装优 ...

  4. 黑马程序员——JAVA基础之简述集合collection

    ------- android培训.java培训.期待与您交流! ---------- 集合: 为什么出现集合类? •  面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对 ...

  5. 黑马程序员——JAVA基础之简述 类的继承、覆写

    ------- android培训.java培训.期待与您交流! ---------- 继承的概述: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只 ...

  6. 黑马程序员----java基础:异常

    dff ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 经常写程序的人对try...catch...finally语句肯定是不陌生的了.但是好多 ...

  7. 黑马程序员 Java基础<九>---> 多线程

    ASP.Net+Android+IOS开发..Net培训.期待与您交流! 多线程 一.概述: 1.线程是什么 说到线程,我们就得先说说进程.所谓进程,就是一个正在执行(进行)中的程序,每一个进程执行都 ...

  8. 黑马程序员——JAVA基础之多线程的线程间通讯等

    ------- android培训.java培训.期待与您交流! ---------- 线程间通讯: 其实就是多个线程在操作同一个资源,但是动作不同. wait(); 在其他线程调用此对象的notif ...

  9. 黑马程序员----java基础:多线程

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ---- ...

随机推荐

  1. Activity(活动)-初讲

    是一种可以包含用户界面的组件,主要用于和用户进行交互. 上一次我们的MainActivity.java 是ADT帮我们自动创建的.手动创建Activity可以加深我们的理解和记忆,于是我们先自己手动创 ...

  2. 管理Fragment

    转载原地址:http://blog.csdn.net/harvic880925/article/details/44927375 相关文章: 1.<Fragment详解之一——概述>2.& ...

  3. LNA和PA

    低噪声放大器(Low Noise Amplifier) -------------LNA 功率放大器(Power Amplifier)---------------------PA LNA是低噪声放大 ...

  4. (转)phonegap 数据库详解

    原文:http://firepix.iteye.com/blog/1618343 phonegap 数据库详解          博客分类: web App phonegap  今天就把之前使用pho ...

  5. hdu 2047

    PS:又是上课偷懒..去递推.. 代码: #include "stdio.h"#include "math.h"long long dp[55];long lo ...

  6. Varnost slovenskih GSM omrežij III

    V torek smo pisali tudi o tem, da Si.Mobil v svojem omrežju dovoli uporabo A5/0 (nešifriranega preno ...

  7. Python的魔法方法 .

    基本行为和属性 __init__(self[,....])构造函数 . 在实例化对象的时候会自动运行 __del__(self)析构函数 . 在对象被回收机制回收的时候会被调用 __str__(sel ...

  8. ASP.NET MVC之视图生成URL

    在MVC的Web应用程序中,我们经常会出现这样的操作,从一个视图跳转到另外一个视图,大部分情况下都是通过链接来实现,当然这是一种非常不错的选择,为什么不说这是最好的选择呢?因为它也有其弊端,我们看看如 ...

  9. 如何修改WAMP数据库上传文件的大小及上传时间限制

    一个文件如果几十兆的话,上传时可能出错,因为执行时间不够, 比如我遇到的ECshop的数据库文件就是 40多M 第一次执行失败. 所以索性一次性把所有东西都设置好.在php.ini(apache中的P ...

  10. 1.NSThread

    前言 每个iOS应用程序都有个专门用来更新显示UI界面.处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就 ...