Thread 类 和 Runnable 接口

在Java中实现多线程有两种方法

  • 继承 Thread 类

    优点:通过覆盖Thread 类的方法,可以改变线程的行为。
  • 实现 Runnable 接口

    优点:不需要继承Thread类,可以继承其他类。
package threads.samples3;

public class ThreadTest {
public static void main(String[] args) {
// 创建 Thread 子类的实例
Thread1 t1 = new Thread1();
// 创建实现了 Runnable 接口的类的实例,将其作为参数传给 Thread 类的实例
Thread t2 = new Thread(new Runnable1());
// 通过调用 start 方法启动线程
t1.start();
t2.start();
}
} class Thread1 extends Thread {
@Override
public void run() {
for(int i = 0; i < 3; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i + " in Thread1");
}
}
} class Runnable1 implements Runnable {
@Override
public void run() {
for(int i = 0; i < 3; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i + " in Runnable1");
}
}
} /*
0 in Thread1
0 in Runnable1
1 in Runnable1
1 in Thread1
2 in Runnable1
2 in Thread1
*/

Thread 类常用方法

  • sleep 方法 :Thread.sleep(1000) 当前线程休眠一秒钟。
  • join 方法:mt.join() 让当前线程等待mt线程运行终止。
  • interrupt 方法:mt.interrupt() 中断mt线程的运行。

synchronized 关键字

  • 在代码块前面加上 synchronized(同步) 关键字并且指定某个需要同步的对象,可以实现该代码块被执行期间指定对象的线程同步和线程安全。
  • 排他锁:加上 synchronized 关键字的代码块在被某个线程执行期间,所指定的同步对象将被加上排他锁。代码块执行完毕,同步对象的排他锁将被解除。
  • 线程同步:在同步对象的排他锁被解除之前,任何企图执行加上了 synchronized 关键字并且指定相同同步对象的代码块的线程都将处于阻塞状态。只有在同步对象的排他锁被解除之后,这些代码块才能被执行。
  • 线程安全:加上 synchronized 关键字的代码块任何时候都不会同时被两个以上的线程执行,即这些代码块是线程安全的。

多线程(Java)的更多相关文章

  1. 多线程Java Socket编程示例

    package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...

  2. 多线程java的concurrent用法详解(转载)

    我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量Java ...

  3. java多线程-Java中的Copy-On-Write容器

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...

  4. 多线程Java Socket编程示例(转)

    这篇做为学习孙卫琴<<Java网络编程精解>>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送 ...

  5. java核心-多线程-Java多线程编程涉及到包、类

    Java有关多线程编程设计的类主要涉及两个包java.lang和java.util.concurrent两个包 java.lang包,主要是线程基础类 <1>Thread <2> ...

  6. 多线程Java Socket编程

    采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求. 1.服务端 package localSocket; import java.i ...

  7. 多线程--Java

    多线程: 1.进程和线程 进程是资源分配的最小单位,线程是CPU调度的最小单位. 每个进程的创建都需要系统为其开辟资源内存空间,并发执行的程序在执行过程中分配和管理资源的基本单位,速度和销毁也较慢.进 ...

  8. Java多线程-Java多线程概述

    第一章 Java多线程概述 线程的启动 线程的暂停 线程的优先级 线程安全相关问题 1.1 进程与线程 进程:可以将运行在内存中的程序(如exe文件)理解为进程,进程是受操作系统管理的基本的运行单元. ...

  9. 2.1多线程(java学习笔记) java中多线程的实现(附静态代理模式)

    一.多线程 首先我们要清楚程序.进程.线程的关系. 首先进程从属于程序,线程从属于进程. 程序指计算机执行操作或任务的指令集合,是一个静态的概念. 但我们实际运行程序时,并发程序因为相互制约,具有“执 ...

  10. 多线程-java并发编程实战笔记

    线程安全性 编写线程安全的代码实质上就是管理对状态的访问,而且通常都是共享的,可变的状态. 一个对象的状态就是他的数据,存储在状态变量中,比如实例域或静态域.所谓共享是指一个对象可以被多个线程访问:所 ...

随机推荐

  1. go语言功能代码

    一.数据类型转换 package main import ( "fmt" "strconv" ) func main() { //int到string str ...

  2. Linux查看DNS服务器及设置DNS服务器

    DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串. 一台主机的dn ...

  3. python程序化交易神器——tushare

    一直想试着将自己的交易思路程序化,可惜困难重重 ,连第一步获取数据都要花很多精力,直到最近发现了Tushare,不仅使用非常便利,功能也无比强大,股票.期货.基金.财经新闻,甚至电影票房等都可以非常便 ...

  4. c#数组去重

    第一种: string[] stringArray = { "aaa", "bbb", "aaa", "ccc", &q ...

  5. python——前端常用的标签

    1.meat标签 meta标签的使用 meta标签共有两个属性:http-equiv和name;不同的属性又有不同的参数值,这些不同的参数值就实现了不同的网页功能. name属性 name属性主要用于 ...

  6. es6(11)--Proxy,Reflect

    //Proxy,Reflect { let obj={ time:'2018-06-25', name:'net', _r:123 }; let monitor = new Proxy(obj,{ / ...

  7. 了解Katalon的安装及基本使用(for mac)

    一.整体了解: 2018 top 6的自动化测试工具(网上了解): 1. Selenium 2. Katalon Studio 3. UFT 4. Watir 5. IBM Rational Func ...

  8. django之models模块使用

    定义模型 将数据库表定义成类,集成models.Model from django.db import models # Create your models here. class Author(m ...

  9. python读取grib grib2气象数据

    如何读取GRIB数据?快看Python大神整理的干货! 橙子心法 百家号17-11-0116:30 GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式,主要用来表示数值天气预报的产品 ...

  10. 10.Ubuntu操作系统及python2.7、3.5 exe

    Ubuntu操作系统 链接:https://pan.baidu.com/s/1cu_eYN1GnW5EwVYrXMJbEg 密码:advq python-3.5.3_32位 链接:https://pa ...