package cn.chen.synchronizefunction2;
/*
自定义线程的创建方式:方式一:1.自定义一个类继承Thread类。2.重写Thread类的run方法,把自定义线程的任务代码写在run方法上。3.创建Thread的子类对象,并且调用start方法启动一个线程。注意:不能直接调用run方法,调用start方法的时候线程就会开启,线程一旦开启就会执行run方法中代码,如果直接调用就相当于调用一个普通方法而已。方式二:1.自定义一个类实现Runnable接口。2.实现Runnable接口的run方法,把自定义线程的任务定义在run方法上。3.创建Runnable实现类(d)的对象调用start方法开启线程。   4.创建Thread类的对象,并且把Runnable实现类的对象(d)作为实参传递。5.调用Thread对象的start方法开启一个线程。注意:1.Runnable实现类的对象并不是一个线程对象,只不过是实现了Runnable接口的对象而已。2.只有Thread或者Thread的子类才是线程对象。3.Runnable 实现类的对象作为实参传递给Thread对象。
*/
public class Demo2 implements Runnable{@Override// TODO Auto-generated method stubpublic void run(){System.out.println("this : "+ this);System.out.println("当前线程 " + Thread.currentThread());for(int i = 0; i < 10; i++){System.out.println(Thread.currentThread().getName()+":"+i);}  }public static void main(String[] args) {// TODO Auto-generated method stubDemo2 d = new Demo2();Thread t = new Thread(d,"狗娃");t.start();}}

推荐使用第二种实现方式:

package cn.chen.threadpractice;
class SaleTicket implements Runnable{int num = 10;@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){synchronized("锁"){if(num>0){System.out.println(Thread.currentThread().getName()+"售出了第"+num+"号票");num--;}else{System.out.println("售罄了");break;}}}}}
public class ThreadPractice {public static void main(String[] args) {// TODO Auto-generated method stubSaleTicket s = new SaleTicket();Thread t1 = new Thread(s,"窗口1");Thread t2 = new Thread(s,"窗口2");Thread t3 = new Thread(s,"窗口3");t1.start();t2.start();t3.start();}}

14.3 线程实现方法2相关推荐

  1. C#跨线程操作控件的线程安全方法

    C#跨线程操作控件的线程安全方法 在C#中,经常用到这样一个场景,Windows Form程序启动一个工作者线程执行一部分工作,这样做是为了避免速度慢的工作如果直接调用会使得主Form停止响应一段时间 ...

  2. 多线程-----操作线程的方法。

    1 . 线程的休眠. 一种能控制线程行为的方法是调用sleep()方法,sleep()方法需要一个参数用于指定该线程休眠的时间,该时间以毫秒为单位.在前面的实例中已经演示过sleep()方法,它通常是 ...

  3. Java终止当前线程的方法

    2019独角兽企业重金招聘Python工程师标准>>> 在系统开发中常常设计到多线程的使用,正常需求下开启线程不需要中途停止,特殊需求下需要停止当前线程(我当前的网页爬取系统中用到, ...

  4. python杀死线程的方法_python杀死一个线程的方法

    由于python线程没有提供abort方法,所以我们需要自己想办法解决此问题,面对这一问题,小编帮大家解决phthon杀死一个线程的方法 最近在项目中遇到这一需求: 我需要一个函数工作,比如远程连接一 ...

  5. python主辅线程_python主线程捕获子线程的方法

    最近,在做一个项目时遇到的了一个问题,主线程无法捕获子线程中抛出的异常. 先看一个线程类的定义 ''''' Created on Oct 27, 2015 @author: wujz ''' impo ...

  6. Centos6 升级glibc-2.17,解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法

    Centos6 升级glibc-2.17,解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法 参考文章: (1)Centos6 升级glibc-2.17,解决 ...

  7. JAVE SE 学习day_09:sleep线程阻塞方法、守护线程、join协调线程同步方法、synchronized关键字解决多线程并发安全问题

    一.sleep线程阻塞方法 static void sleep(long ms) Thread提供的静态方法sleep可以让运行该方法的线程阻塞指定毫秒,超时后线程会自动回到RUNNABLE状态,等待 ...

  8. 陈硕智能指针线程安全_C++ 创建线程的方法

    C++开发过程中,创建线程是必不可少的,今天就给大家说说c++创建线程的方法,主要介绍我常用的2种方法. 第一种:CreateThread HANDLE WINAPI CreateThread( t ...

  9. 【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )

    文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性 3 ...

最新文章

  1. AutoCAD2012打开后一闪的解决方法
  2. Svchost.exe病毒
  3. linux线程一直在增加,在.net core中遇到的奇怪问题:内存与线程数一直增长
  4. 分享一个在线考试系统,练手项目用他很香
  5. c语言多维数组指针地址讲解,C语言入门之多维数组的指针变量
  6. JavaScript打包与解包工具
  7. 你好骚啊......
  8. phpMyAdmin4.4.10安装
  9. trados 有道api_在Trados中使用微软机器翻译
  10. 数据分析师出品丨采购周报模板
  11. PCI、PCIe、PCI BIOS概念介绍
  12. 转载:《星际争霸》星际争霸战略战术的发展和创新
  13. python开发问卷系统_哪个开源的问卷调查系统最好用?
  14. js unshift性能分析
  15. 京东股权众筹投后总结和反思
  16. Kubernetes 集群文件描述符测漏了...
  17. Ubuntu 14.04 smba服务器的配置——亲测方便可用
  18. ROC受试曲线AUC[TPR/ FPR/截断点/StratifiedKFold/KFold]
  19. Linux - 关于/opt文件夹的说明
  20. php获取另一个网页内容,php获取html网页内容的多个方法

热门文章

  1. 一张图看懂阿里云网络产品【十五】IPv6 解决方案
  2. 使用Jest操作ElasticSearch 报错:No time zone indicator问题的解决方案
  3. Linux 查看进程命令
  4. 问题:# mount –t ntfs /dev/sdb1 /mnt/ 解决办法
  5. Powershell管理系列(二十五)PowerShell操作之获取AD账号及邮箱信息
  6. Web APi之认证(Authentication)两种实现方式【二】(十三)
  7. 安装 ArcGISAPI31forSilverlight an i/o error occured while installing a file错误解决
  8. 使 IDEA 的 termina l可以使用 Linux 下的终端命令
  9. Linux下载交通图片数据集CityScapes Dataset
  10. linux下配置Docker的jupyter notebook环境