欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

黑马程序员_多线程1,黑马程序员多线程

来源: javaer 分享于  点击 26258 次 点评:273

黑马程序员_多线程1,黑马程序员多线程


----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

<span >package cn.itcast_01;

public static void main(String[] args){
 Mythread yulongchao=new MyThread();
 Thread yulongchao2=new Thread(yulongchao);
 while(true){
  System.out.println("这是我的第一个程序");
 }
 
}
public static MyThread implements Runnable(){
 public void run(){
  System.out.println("这是我的第二个程序");
 }
}

</span>


首先我们通过这个多程序来了解,如果是第一程序一直执行的话,并且是死循环
最终的后果只能是内存溢出,如果是用户要求能够在执行第一个死循环的话,同时执行第二个
死循环的话,那就从这个地方引出线程,
线程的英文表示Thread。
多线程:一个应用程序有多条执行路径。
 *
 * 进程:就是正在运行的应用程序。
 * 线程:是应用程序的执行路径,执行单元。
 * 单线程:一个应用程序只有一条执行路径。
 * 多线程:一个应用程序有多条执行路径。
 *
 * 举例:
 *   迅雷下载。
 *
 *   吃饭。
 *   单进程单线程:一个人吃一桌菜。
 *   单进程多线程:多个人吃一桌菜。
 *
 * 我们现在要自己实现这样的一个程序,该怎么办呢?
 * 首先,我们先为一个应用程序创建一个进程,然后呢,在把这个进程给开辟出多条执行路径。这样就能实现。
 * 但是, 我们是做不了的。
 * 因为进程是由系统创建的,而Java语言是不能操作操作系统的资源的。
 * 所以,我们自己不能直接做这个事情。为了简化这个操作,
 * java语言本身在底层做了这样的事情,然后直接给我们提供了一个线程的类供我们使用。
 * 那么,这个类是什么呢?Thread。
 *
 * 通过查看API,我们知道模拟多线程程序有2种方案。
 * 第一种方案:继承Thread类。
 * 步骤:
 *   A:自定义类MyThread继承自Thread类。
 *   B:重写Thread类的run()方法。
 *    为什么要重写该方法呢?
 *    因为run()方法里面封装的代码才是被线程执行的代码。
 *   C:在测试类中,创建MyThread类对象。
 *   D:运行程序。
 *    怎么运行呢?
 *    不能直接调用run()方法运行,否则,它会把run()方法当作普通的方法运行。
 *    这个时候,必须要有一个动作,开启线程,然后它才可以去调用run()方法。
 *
 *    调用start()运行。
 *

<span >public class MyThreadDemo {
 public static void main(String[] args) {
  // 方式1:错误做法
  // MyThread my = new MyThread();
  // // 运行
  // my.run();
  // my.run();

  // 方式2:错误做法
  // MyThread my1 = new MyThread();
  // MyThread my2 = new MyThread();
  // my1.run();
  // my2.run();

  // 方式3:正确做法
  MyThread my1 = new MyThread();
  MyThread my2 = new MyThread();

  my1.start();
  my2.start();
 }
}

</span>


如何获取线程名称呢?
 

<span >* public final String getName():获取线程名称。默认值:Thread-编号组成。从0开始。
 * public final void setName(String name):更改线程名称。

public class MyThreadDemo {
 public static void main(String[] args) {
  // 通过无参+setXxx()
  // // 创建线程对象
  // MyThread my1 = new MyThread();
  // MyThread my2 = new MyThread();
  // // 更改线程名称
  // my1.setName("于龙超1");
  // my2.setName("于龙超2");

  // 通过带参构造方法
  MyThread my1 = new MyThread("于龙超1");
  MyThread my2 = new MyThread("于龙超2");

  // 启动线程
  my1.start();
  my2.start();
 }
}

</span>


 

实现了接口的类本身不是一个线程类,仅仅是封装了被线程执行的代码。
所以,它不能直接使用getName()方法。
针对这种情况,Threa的提供了另外的一种方式:

<span >public static Thread currentThread():返回对当前正在执行的线程对象的引用。 

public class MyRunnable implements Runnable {

 @Override
 public void run() {
  for (int x = 0; x < 100; x++) {
   System.out.println(Thread.currentThread().getName() + "---" + x);
  }
 }

}

</span>


 

方式2:实现Runnable接口。
步骤:
  A:自定义类MyRunnable实现Runnable接口。
  B:重写run()方法。
  C:创建MyRunnable的对象。
  D:创建Thread类的对象,并把MyRunnable的对象作为参数传递。

 

<span >public class MyRunnableDemo {
 public static void main(String[] args) {
  // 创建MyRunnable的对象
  MyRunnable my = new MyRunnable();

  // 创建Thread类的对象,并把MyRunnable的对象作为参数传递。
  // Thread(Runnable target)
  // Thread t1 = new Thread(my);
  // Thread t2 = new Thread(my);

  // Thread(Runnable target, String name)
  Thread t1 = new Thread(my, "于龙超1");
  Thread t2 = new Thread(my, "于龙超2");

  t1.start();
  t2.start();
 }
}


</span>


 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

相关文章

    暂无相关文章
相关栏目:

用户点评