当前位置: 首页 > 编程日记 > 正文

Java 线程 笔记(1)

线程是一个程序内部的顺序控制流

线程和进程的区别:

    1.  每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销

    2.  线程可以看成是轻量级的进程,同一类的线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器

         线程切换开销小

    3.  多进程:在操作系统中可以运行多个任务

         多线程:在同一应用程序中,有多个顺序流同时执行

 

Java的线程是通过java.lang.Thread类来实现的

VM启动时,会有一个由主方法(public static void main(String[ ] args))定义的线程

通过创建Thread类的新实例来创建新的线程

每个线程都是通过特定Thread对象所对应的run( )方法来执行操作,方法run( )称为线程体

通过调用Thread类的start( )方法来启动线程

 

 

两种创建新线程的方式:

1.定义线程类实现接口Runnable

Runnable 里只有一个run( )方法, 没有其他的内容。

public void run( );   用来定义线程运行体

使用Runnable接口,可以为多个线程提供共享的数据  (这些共享数据的线程需要时同一类)

构造方法:

Thread(Runnable target)  实际使用的时候,传入的是实现了这个接口的对象,父类引用指向子类对象。

 

   1:  public class TestThread1 {
   2:      public static void main(String args[]) {
   3:      Runner1 r = new Runner1();      //new了一个线程类的对象
   4:          //要想起一个线程,要new一个Thread对象

5: t.start(); //线程启动,告诉CPU,现在有个新的线程。

这个必须调用Thread实例的start()方法

   6:      for(int i=0; i<100; i++) {      //产生了一个新的分支,两个线程交替执行 
   7:      System.out.println("Main Thread:------" + i);
   8:          }
   9:      }
  10:  }
  11:   
  12:   {
  13:                  public void run() {
  14:      for(int i=0; i<100; i++) {    
  15:      System.out.println("Runner1 :" + i);
  16:          }
  17:      }
  18:  }

  执行结果就是 两个线程交替执行,交替输出0-100的数

 

   1:  public class TestThread1 {
   2:      public static void main(String args[]) {
   3:      Runner1 r = new Runner1();
   4:     ;           // 调用Runner1对象的run()方法,执行完以后,才继续向下执行,
                                 没有多线程    
   5:      for(int i=0; i<100; i++) {
   6:              System.out.println("Main Thread:------" + i);
   7:          }
   8:      }
   9:  }
  10:   
  11:  class Runner1 implements Runnable {
  12:  public void run() {
  13:          for(int i=0; i<100; i++) {    
  14:              System.out.println("Runner1 :" + i);
  15:          }
  16:      }
  17:   

执行结果就是 先run()方法,再main()里的println()方法

 

2.定义一个Thread类的子类,并重写run方法

   class MyThread extends Thread{

      public void run(){

      }                

}

然后生成该类的对象

MyThread mythread = new MyThread(…);

 

   1:  public class TestThread1 {
   2:      public static void main(String args[]) {
   3:          Runner1 r = new Runner1();        //Runner1是Thread的子类
   4:          r.start();                //调用Thread子类对象的start()方法
   5:      for(int i=0; i<100; i++) {
   6:              System.out.println("Main Thread:------" + i);
   7:          }
   8:      }
   9:  }
  10:   
  11:  class Runner1 extends Thread {
  12:      public void run() {
  13:          for(int i=0; i<100; i++) {    
  14:              System.out.println("Runner1 :" + i);
  15:          }
  16:      }
  17:  }

结果是2个线程交替执行。

 

tips:能使用接口的时候,不要从Thread类继承

 

线程控制基本方法:

isAlive() ——————判断线程是否还活着,是否还未终止

getPriority()—————获得线程的优先级数值

setPriority()——————设置线程的优先级数值

Thread.sleep()—————将当前线程睡眠指定毫秒数

join()————————调用某线程的该方法,将当前线程与该线程合并,等待该线程结束,再恢复当前线程的运行

yield()————————让出CPU

sleep方法:

   1:  import java.util.*;
   2:  public class TestInterrupt {
   3:    public static void main(String[] args) {
   4:      MyThread thread = new MyThread();
   5:      thread.start();
   6:      try {Thread.sleep(10000);}
   7:      catch (InterruptedException e) {}
   8:      thread.interrupt();
   9:    }
  10:  }
  11:   
  12:  class MyThread extends Thread {
  13:      boolean flag = true;
  14:    public void run(){
  15:      while(flag){
  16:        System.out.println("==="+new Date()+"===");
  17:        try {
  18:          sleep(1000);
  19:        } catch (InterruptedException e) {
  20:          return;
  21:        }
  22:      }
  23:    }
  24:  }

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/bevin-h/archive/2012/04/23/2467031.html

相关文章:

smartcrop.js智能图片裁剪库

今天将为大家介绍一款近期github上很不错的开源库 – smartcrop.js。它是一款图片处理的智能裁剪库。在很多项目开发中&#xff0c;经常会遇见上传图片的场景&#xff0c;它可能是用户照片信息&#xff0c;也可能是商品图片等。然而在网页布局中&#xff0c;为了更好的用户体验…

golang 解析php序列化,golang实现php里的serialize()和unserialize()序列和反序列方法详解...

Golang 实现 PHP里的 serialize() 、 unserialize()安装go get -u github.com/techleeone/gophp/serialize用法package mainimport ("fmt""github.com/techleeone/gophp/serialize")func main() {str : a:1:{s:3:"php";s:24:"世界上最好的语…

HotSpot模板解释器目标代码生成过程源码分析

虽然说解释执行模式是逐字逐句翻译给目标平台运行的&#xff0c;但这样的过程未免太过缓慢&#xff0c;如果能把字节码说的话做成纸条&#xff0c;运行时只要把对应的纸条交给目标平台就可以了&#xff0c;这样&#xff0c;执行速度就会明显提升。JVM的Hotspot虚拟机的模板解释…

flex--unable to transcode image

很低级的解决啊&#xff0c;把那个.png文件用画图打开后&#xff0c;重新用png格式保存了下就好咧。。。 转载于:https://www.cnblogs.com/avenxia/archive/2012/04/24/2468334.html

svn服务器发生变更,如何切换

参考链接&#xff1a; https://blog.csdn.net/jk110333/article/details/9301283 https://blog.csdn.net/emtit2008/article/details/51498012 svn switch --relocate svn://旧IP地址/项目 svn://新IP地址/项目 如果是windows客户端,直接在工作副本上右键&#xff0c;选择Torto…

泛型java博客园,Java深度历险之Java泛型

Java泛型(generics)是JDK 5中引入的一个新特性&#xff0c;允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在JDK 5中的新集合类框架中。对于泛型概念的引入&#xff0c;开发社区的观点是褒贬不一。从好…

EXCEL-XML 代码相对行列转换绝对

这段时间因为工作的要求&#xff0c;需要在程序中处理xml 格式的excel 文档。但是在期间遇到了一个问题就是Row 和 Cell 的index 属性相对绝对的问题。 之前在bing 找了一下没找到介绍相对转换成绝对的资料。在经过多次的尝试和对比在空白的文档中不同的cell 中输入值后的XML文…

Integer 和 int 比较的特殊之处

2019独角兽企业重金招聘Python工程师标准>>> 第一个例子&#xff1a; 假设我们同时定义 int a 3; int b 3; 编译器先处理int a 3&#xff1b; 首先它会在栈中创建一个变量为a的引用&#xff0c;然后查找栈中是否有3这个值&#xff0c;如果没找到&#xff0c;就…

偷偷mark下一个

java书单thinking in java java战 Effective Java 深入了解JVM虚拟机 java性能优化权威指南 JSR133 Google Guava官方教程版权声明&#xff1a;本文博主原创文章&#xff0c;博客&#xff0c;未经同意不得转载。 转载于:https://www.cnblogs.com/hrhguanli/p/4915607.html

unix odbc php 连接sqlserver,Ubuntu下通过unixODBC连接MS SqlServer2005

一、下载相关软件 unixODBC、freetds(1) Linux系统的ODBC unixODBC-2.2.8.tar.gz (http://www.unixodbc.org)(2) 连接SQLServer或Sybase的驱动 freetds-0.62.4.tar.gz (http://www.freetds.org)二、安装和配置(1) 安装unixODBC# tar vxzf unixODBC-2.2.8.tar.gz# cd un…

Apache htpasswd命令

一、简介 htpasswd是apache的一个工具&#xff0c;该工具主要用于建立和更新存储用户名、密码的文本文件&#xff0c;主要用于对基于http用户的认证。 二、语法 Usage:htpasswd [-cimBdpsDv] [-C cost] passwordfile usernamehtpasswd -b[cmBdpsDv] [-C cost] passwordfile use…

l2-22(重排链表)

题目链接&#xff1a;https://pintia.cn/problem-sets/994805046380707840/problems/994805057860517888 题意&#xff1a;给定链表L1->L2->...->Ln&#xff0c;要求按Ln->L1->Ln-1->L2->...的格式输出。 思路&#xff1a;水模拟&#xff0c;按照要求做就…

深入研究敏捷的成功因素

Scott W. Ambler针对Dr. Dobbs网站上发布的敏捷成功因素进行了一些分析讨论&#xff0c;那些敏捷成功因素来自2011年11月的敏捷现状调查结果。据此文所说&#xff0c;此次调查的两个目标是&#xff1a; 为了探索与敏捷项目成功有关的实施策略&#xff0c;例如对单一敏捷团队的行…

php 多条数据更新数据类型,PHPdoc @param中的两个或多个数据类型

好的,我有这个phpdoc上面的我的类方法/*** this a function that translates the text* param string|boolean $lang if string the string given in the parameter will be the language code that will represent the language desired, if true, this will translate based …

快速构建Spring Cloud工程

spring cloud简介 spring cloud为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基于spr…

win10红色警戒黑屏解决

相信很多80&#xff0c;90后的同学们都喜欢在代码之余打打红色警戒 但是苦于win10差劲兼容性&#xff0c;每次下个红色警戒or尤里复仇不是弹框就是黑屏 今天笔者给出一个完美究极解决方案 请注意&#xff1a; 1&#xff01;红色警戒中把Ra2.exe和Game.exe右键兼容性调到Win XP …

html超链接button

1.如果让本页转向新的页面则用&#xff1a; <input typebutton οnclick"window.location.href(连接)"> 2.如果需要打开一个新的页面进行转向&#xff0c;则用&#xff1a; <input typebutton οnclick"window.open(连接)">转载于:https://www…

低版本jdbc连接高版本oracle,转:oracle11g的JDBC连接 URL和之前的版本有一定的区别...

今天安装了oracle11g后&#xff0c;写了JDBC测试程序&#xff0c;一直都连接不上&#xff01;一直找不到原因后来读了一下安装文件中的Readme.txt文档&#xff0c;汗啊&#xff01;这个版本居然把url的访问方式改变了&#xff1a;Some Useful Hints In Using the JDBC Drivers-…

Android studio 获取每次编译apk时的日期

项目中需要获取apk的编译日期&#xff0c;首先肯定是用手动的方式获取&#xff0c;但这样容易遗忘&#xff0c;怎么样通过代码的方式获取呢&#xff1f; 其实android 为我们提供了一个BuildConfig的类&#xff0c;android 每次编译的时候都会自动生成 一次BuildConfig 类&#…

明文存密码成惯例?Facebook 6 亿用户密码可被 2 万员工直接看

近日&#xff0c;外媒发布了一份互联网安全的调研报告&#xff0c;报告中称Facebook曾将6亿用户的账号密码使用明文存储&#xff0c;且可以被Facebook内部员工随意搜索查看。据Facebook方面的消息人士称&#xff0c;纯文本存档的用户密码可追溯到2012年&#xff0c;在这期间有超…

pthreads 的学习

多线程学习参考的网站&#xff1a; http://www.ibm.com/developerworks/cn/linux/l-pthred/ 初探线程——pthread_create http://www.cnblogs.com/huangwei/archive/2010/05/19/1739593.html 转载于:https://www.cnblogs.com/nemo2011/archive/2012/05/02/2479163.html

Oracle不加IP无法登录,Oracle 无法通过IP连接问题

1.安装目录:D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN2.listener.ora(里面的localhost或127.0.0.1改成机器名)# listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora# Generated by Oracle…

巧用gh-pages分支发布自己的静态项目

大家都知道可以通过github pages 发布自己的静态博客&#xff0c;然后通过 username.github.io 可以访问。例如我的博客可以通过 nqmysb.github.io 访问&#xff0c;不过我的已经绑定域名 https://liaocan.top &#xff0c;所以会直接跳转到域名显示。但是我们通常有很多其他的…

【读书笔记】iOS-网络-解析响应负载

Web Service可以通过多种格式返回结构化数据&#xff0c; 不过大多数时候使用的是XML与JSON。也可以让应用只接收HTML结构的数据。实现了这些Web Service或是接收HTML文档的应用必须能解释这种结构化数据并将其转换为对于应用上下文有意义的对象。 一&#xff0c;XML 使用原生解…

What Are Words(一诺千金)

曲名&#xff1a;What Are Words&#xff08;一诺千金&#xff09;Anywhere you are, I am near Anywhere you go, Ill be there Anytime you whisper my name, youll see How every single promise I keep Cause what kind of guy would I be If I was to leave when you need…

oracle 插入 基准测试,oracle proc 插入操作性能优化实践

场景&#xff1a;student 表中 10万条数据。从 student 表中取出所有数据&#xff0c;插入到 student_his 表中优化方法&#xff1a;1.批量插入(效果明显)2.批量查询(效果不明显)3.批量提交(效果不明显)4.预编译 sql 语句(效果不明显)效果&#xff1a;10万条数据&#xff0c;普…

240个jquery插件

240个jquery插件 http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/File upload Ajax File Upload.jQUploader.Multiple File Upload plugin.jQuery File Style.Styling an input type file.Progress Bar Plugin. Form Validation jQuery Valida…

sql 优化 tips

索引就是排序 outer join笛卡儿积, inner join看情况。 可以用临时表加update的方式把outer join 替换成inner join提高性能。用union代替where中的or 和join(不同表时)join的列有索引&#xff0c;select 中的列能被索引覆盖到&#xff0c;消除执行计划中的lookup(lookup有时会…

第24课 《前端之路,以不变应万变》

今天的内容有些借鉴于业内大佬的内容&#xff0c;由于本人技术实在太渣&#xff0c;几乎没有可以用来演讲的素材。抱歉 大家好&#xff0c;我是来自存勖科技的Rocken。我今天演讲的内容是&#xff1a;前端的未来。大家都知道&#xff0c;前端所依托的基础直到上世纪九十年代才出…

php hasattribute,PHP DOMElement hasAttribute()用法及代码示例

DOMElement::hasAttribute()函数是PHP中的内置函数&#xff0c;用于了解具有特定名称的属性是否作为元素的成员存在。用法:bool DOMElement::hasAttribute( string $name )参数&#xff1a;该函数接受单个参数$name&#xff0c;该参数保存属性的名称。返回值&#xff1a;如果成…