/**
线程存在于进程当中,进程由系统创建。
创建新的执行线程有两种方法
注意:
  线程复写run方法,然后用start()方法调用,其实就是调用的run()方法,只是如果直接启动run()方法,
  那么就会出现线程调用结束后再执行主函数的情况。另一种情况是用start()说多线程都在抢夺执行权,要明确的是:某一时刻,只能 有一个程序在执行,多核除外.
  同时注意线程优先级用0-5表示
    1、Real-time:实时
2、High:高
3、Above normal:高于标准
4、Normal:标准
5、Below normal:低于标准
6、Idle:空闲。
第一种:将类声明为Thread的子类。该子类重写Thread类的run方法,之后就可以分配并且启动该子类的实例。
第二种:声明实现Runnable的接口类。在该类实现run()方法,然后分配该类实例,在创建Thread时作为一个参数传递并启动。Runnable为非Thread子类的类提供了一种激活的方式。
因为接口实现的Thread的接口类并不是线程,所以使用的时候要先创建该类然后创建线程并把该类对象传进创建的线程类。
这两种方式的区别:
第二种实现的方式,也就是实现接口,避免了但继承的局限性,一般用这种。
还有就是线程代码存放位置不同。接口方法:代码放在接口子类的run()方法中;继承方法:代码放在Thread子类的run()方法中。
**/
class Demo extends Thread//implements Runnable
{
public void run()
{
for(int x=0;x<60;x++)
System.out.println(Thread.currentThread()+"子线程运行");
}
}
class ThreadTest1
{
public static void main(String[] args)
{
//继承方式:extends
Demo demo= new Demo();
demo.start();
for(int x=0;x<60;x++)
System.out.println("主线程运行");
/**实现接口方式:implements
Demo demo = new Demo();
Thread td1 = new Thread(demo);
Thread td2 = new Thread(demo);
Thread td3 = new Thread(demo);
Thread td4 = new Thread(demo);
td1.start();
td2.start();
td3.start();
td4.start();
这样的好处就是线程单独创建,不会造成在extends中类似的困扰,就是说“票”不会重复,同时好处在上边注释中有说
**/
}
}

线程的实现方法以及区别 extends Thread、implements Runable的更多相关文章

  1. 线程的状态有哪些,线程中的start与run方法的区别

    线程在一定条件下,状态会发生变化.线程一共有以下几种状态: 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法. ...

  2. 02_线程的创建和启动_继承Thread方式

    [简述] java使用Thread类代表线程,所有的线程都必须是Thread或者其子类的实例. 每个线程的任务就是完成一定的任务,实际上就是执行一段程序流. [创建并启动多线程的步骤(集成Thread ...

  3. 线程的使用方法start run sleep join

    今天回顾了Java的线程的一些知识 例1:下面代码存有详细的解释 主要是继承Thread类与实现Runnable接口 以及start()和run()方法 package com.date0607; / ...

  4. Java 线程第三版 第四章 Thread Notification 读书笔记

    一.等待与通知 public final void wait() throws InterruptedException      等待条件的发生. public final void wait(lo ...

  5. day 34线程的其他方法,线程池

    线程的其他方法:  from threading import Thread,current_thread: currrent_thread().getName()  获取线程的名称 current_ ...

  6. 并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程

    1.开启线程的两种方式: 进程,线程: 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位) 1.同一个进程内的多个线程共享该进程内的地址资源 2.创建线 ...

  7. Python之路(第四十二篇)线程相关的其他方法、join()、Thread类的start()和run()方法的区别、守护线程

    一.线程相关的其他方法 Thread实例对象的方法 # isAlive(): 返回线程是否活动的. # getName(): 返回线程名. # setName(): 设置线程名. ​ threadin ...

  8. Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

  9. Java线程中run和start方法的区别

    http://bbs.csdn.net/topics/350206340 Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法 ...

随机推荐

  1. easy-ui 有依赖关系的下拉列表(省市区县)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 【Android-UI】包含多个子View时触发父节点的焦点事件

    今天遇到个问题: 在 LinearLayout 中添加了好几个其他视图 View 之后,点击时不能获得焦点,导致绑定的 onClick 事件不能触发. 解决办法: 对 LinearLayout 添加属 ...

  3. linux统计单词数

    sort +awk+uniq 统计文件中出现次数最多的前10个单词 实例 cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sor ...

  4. NGUI中的Tween的委托使用

    public TweenPosition tweenIn; public TweenScale tweenOut; EventDelegate In = new EventDelegate(this, ...

  5. 三星首次更新Gear VR虚拟现实浏览器

    通过VR浏览网页不是问题,不过你需要一个专门的VR浏览器,而GearVR的虚拟现实应用名为"Samsung Internet for Gear VR".继去年12月份上线后,迎来了 ...

  6. 调用ZoomEye API获取信息

    最近在提高自己编程能力,拿一些实用的小工具练下.该脚本为python语言,主要涉及模块urllib,json,os模块. 功能:调用ZoomEye API获取信息 import urllib.requ ...

  7. ps -ef |grep 输出的具体含义

    [root@localhost ~]# ps -ef | grep ApacheJetspeed root     18887 18828  0 08:09 pts/0    00:00:00 gre ...

  8. Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)

    Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc) 来源:http://blog.csdn.net/chunyexiyu/article/ ...

  9. perl Mail::Sender模块发送邮件

    #!/usr/bin/perl -w use strict; use Mail::Sender; ; ){ my $sender = Mail::Sender->new({ smtp => ...

  10. Mysql表结构定义及相关语法

    mysql语法及相关命令1.每个sql命令都需要使用分号来完成2.可以将一个命令写成多行3.可以通过\c来取消本行命令4.可以通过\g.exit.ctrl+c或者quit来退出当前客户端5.可以通过使 ...