java笔记之线程方式1启动线程

* 需求:我们要实现多线程的程序。
 * 如何实现呢?
 *   由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来。
 *   而进程是由系统创建的,所以我们应该去调用系统功能创建一个进程。
 *   Java是不能直接调用系统功能的,所以,我们没有办法直接实现多线程程序。
 *   但是呢?Java可以去调用C/C++写好的程序来实现多线程程序。
 *   由C/C++去调用系统功能创建进程,然后由Java去调用这样的东西,
 *   然后提供一些类供我们使用。我们就可以实现多线程程序了。
 * 那么Java提供的类是什么呢?
 *   Thread
 *   通过查看API,我们知道了有2中方式实现多线程程序。
 *
 * 方式1:继承Thread类。
 * 步骤
 *   A:自定义类MyThread继承Thread类。
 *   B:MyThread类里面重写run()?
 *    为什么是run()方法呢?
 *   C:创建对象
 *   D:启动线程

run()和start()的区别?
  // run():仅仅是封装被线程执行的代码,直接调用是普通方法
  // start():首先启动了线程,然后再由jvm去调用该线程的run()方法。

 1 public class MyThreadDemo {
 2     public static void main(String[] args) {
 3         // 创建线程对象
 4         // MyThread my = new MyThread();
 5         // // 启动线程
 6         // my.run();
 7         // my.run();
 8         // 调用run()方法为什么是单线程的呢?
 9         // 因为run()方法直接调用其实就相当于普通的方法调用,所以你看到的是单线程的效果
10         // 要想看到多线程的效果,就必须说说另一个方法:start()
11         // 面试题:run()和start()的区别?
12         // run():仅仅是封装被线程执行的代码,直接调用是普通方法
13         // start():首先启动了线程,然后再由jvm去调用该线程的run()方法。
14         // MyThread my = new MyThread();
15         // my.start();
16         // // IllegalThreadStateException:非法的线程状态异常
17         // // 为什么呢?因为这个相当于是my线程被调用了两次。而不是两个线程启动。
18         // my.start();
19
20         // 创建两个线程对象
21         MyThread my1 = new MyThread();
22         MyThread my2 = new MyThread();
23
24         my1.start();
25         my2.start();
26     }
27 }
28 public class MyThread extends Thread {
29
30     @Override
31     public void run() {
32         // 自己写代码
33         // System.out.println("好好学习,天天向上");
34         // 一般来说,被线程执行的代码肯定是比较耗时的。所以我们用循环改进
35         for (int x = 0; x < 200; x++) {
36             System.out.println(x);
37         }
38     }
39
40 }

时间: 2024-08-14 02:19:54

java笔记之线程方式1启动线程的相关文章

java线程 — 创建和启动线程

创建和启动线程,传统有两种方式: 方式1:继承Thread类: 方式2:实现Runnable接口: 线程类(java.lang.Thread):Thread类和Thread的子类才能称之为线程类.阅读API main方法就是一个主线程 方式1: 步骤: 1. 定义一个类A继承于java.lang.Thread类. 2. 在A类中覆盖Thread类中run方法. 3. 我们在run方法中编写需要执行的操作---->run方法里的,线程执行体 4. 在main方法(线程)中,创建线程对象,并启动线程

【Java 语言】Java 多线程 一 ( 线程启动 | 线程中断 )

一. 线程启动 线程启动 : -- 1. 继承 Thread 运行线程 : 重写 Thread 类的 run 方法, 然后执行该线程; -- 2. 实现 Runnable 接口, 并运行线程; -- 代码示例 : package com.hanshuliang.thread; public class ThreadStart { public static void main(String[] args) { //1. 继承 Thread 运行线程 MyThread thread = new M

Java核心(二)深入理解线程池ThreadPool

本文你将获得以下信息: 线程池源码解读 线程池执行流程分析 带返回值的线程池实现 延迟线程池实现 为了方便读者理解,本文会由浅入深,先从线程池的使用开始再延伸到源码解读和源码分析等高级内容,读者可根据自己的情况自主选择阅读顺序和需要了解的章节. 一.线程池优点 线程池能够更加充分的利用CPU.内存.网络.IO等系统资源,线程池的主要作用如下: 利用线程池可以复用线程,控制最大并发数: 实现任务缓存策略和拒绝机制: 实现延迟执行 阿里巴巴Java开发手册强制规定:线程资源必须通过线程池提供,如下图

Python的并发并行[4] -&gt; 并发 -&gt; 利用线程池启动线程

利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 1 from concurrent.futures import ThreadPoolExecutor as tpe 2 from concurrent.futures import ProcessPoolExecutor as ppe 3 from time import ctime, sleep 4 from random import randint 5 6 def f

Java多线程系列---“基础篇”07之 线程休眠

转自:http://www.cnblogs.com/skywang12345/p/3479256.html   (含部分修改) 概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括: sleep()介绍 sleep()示例 sleep() 与 wait()的比较 一. sleep()介绍 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从"运行状态"进入到"休眠(阻塞)状态".sleep()会

Java笔记五.多线程

Java中的多线程(一) 一.理解线程 1.进程.线程.多线程 1.进程:在多任务系统中,每个独立执行的程序(或说正在进行的程序)称为进程. 2.线程:一个进程中又可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索(一部分代码). 3.多线程:如果要一程序中实现多段代码同时交替运行,就需产生多个线程,并指定每个线程上所要运行的程序代码,即为多线程. 注:在单线程中,程序代码的执行是按调用顺序依次往下执行的,不能实现两端程序代码同时交替运行的效果.当我们的程序启动运行时,会自动产生一个

13.3-全栈Java笔记:打飞机游戏实战项目|PaintThread|launchFrame

多线程和内部类实现动画效果 1)增加绘制窗口的线程类 前三个版本,我们步步为营,每个小版本都有功能的突破.但是,目前为止我们的窗口仍然是静态的,并没有像真正的游戏窗口那样"各种动.各种炫".本节我们结合多线程实现动画效果. 我们在MyGameFrame类中定义"重画窗口线程PaintThread类",为了方便使用MyGameFrame类的属性和方法,我们将PaintThread定义成内部类. [示例1]MyGameFrame类:增加PaintThread内部类 pu

java核心学习(二十一) 多线程---创建启动线程的三种方式

本节开始java多线程编程的学习,对于操作系统.进程.线程的基本概念不再赘述,只是了解java对于多线程编程的支持有哪些. 一.继承Thread类来创建线程 java语言中使用Thread类来代表线程,代表线程的类可以通过继承Thread类并重写run()方法来实现多线程开发,调用线程类实例的start方法来启动该线程.下面来试一试 package ThreadTest; public class FirstThread extends Thread{ private int i; public

java笔记线程两种方式模拟电影院卖票

1 public class SellTicketDemo { 2 public static void main(String[] args) { 3 // 创建三个线程对象 4 SellTicket st1 = new SellTicket(); 5 SellTicket st2 = new SellTicket(); 6 SellTicket st3 = new SellTicket(); 7 8 // 给线程对象起名字 9 st1.setName("窗口1"); 10 st2.