Cpu内部是串行的是分时执行,在外面是并行的
多线程
1 继承 Thread类 中public void run()
2 实现 Runnable接口 实现public void run()
1 等待输入
2 thread。sheep()
3 t2:t1.join()
|
Os选 中
public class TestThread {
public static void main(String[] args) {
Thread t1=new ThreadA();
Runnable target=new Target();
Thread t2=new Thread(target);
t1.start();
t2.start();
}
}
class ThreadA extends Thread{
public void run(){
for(int i=1;i<=100;i++){
System.out.println(i+" $$$");
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
}
}
class Target implements Runnable{
public void run(){
for(int i=1;i<=100;i++){
System.out.println(i+" ###");
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
}
}
结果:
1 $$$
1 ###
2 ###
2 $$$
3 ###
3 $$$
4 $$$
4 ###
5 $$$
5 ###
6 ###
6 $$$
7 ###
7 $$$
8 $$$
8 ###
9 $$$
9 ###
10 $$$
10 ###
11 $$$
11 ###
12 $$$
线程:进程中并发的一个顺序执行流程
并发原理:CPU分时间片,多线程交替运行
宏观并行,微观串行
线程三要素:CPU Data Code
多线程间堆空间共享,栈空间独立
创建线程两种方式:继承Thread类,实现Runnable接口
Thread对象代表了一个线程
多线程共同访问了同一个对象(临界资源),如何破坏了不可分割的操作(原子操作),就会造成数据不一致的情况
在Java中,任何对象都有一个互斥锁标记,用来分配给线程.
synchronized(o){} 对o加锁的同步代码块
只有拿到o的锁标记的线程,才能进入对o加锁的同步代码快,退出同步代码块,会自动释放o的锁标记
public synchronized void m(){} 同步方法,对this加锁
哪个线程能拿到对象的锁,哪个线程就能调用对象的同步方法
在Java中,任何对象都有一个锁池,用来存放等待该对象锁标记的线程
一个线程,可以同时拥有多个对象的锁标记,线程阻塞在对象锁池中时,不会释放其所拥有的其他对象的锁标记
在Java中,任何对象都有一个等待队列,用来存放线程
t1对o调用wait方法,必须放在对o加锁的同步代码块中! 1.t1会释放其所拥有的所有锁标记;2.t1会进入o的等待队列
t2对o调用notify/notifyAll方法,也必须放在对o加锁的同步代码块中! 会从o的等待队列中释放一个/全部线程 对t2毫无影响
public class TestProducerConsumer {
public static void main(String[] args) {
MyStack ms=new MyStack();
Thread t1=new Producer(ms);
Thread t2=new Consumer(ms);
t1.start();
t2.start();
}
}
class MyStack{
char[] data=new char[6];
int index=0;
private void print(){
for(int i=0;i<index;i++){
System.out.print(data[i]+" ");
}
System.out.println();
}
public synchronized void push(char c){
while(index==data.length){
try {
this.wait();
} catch (InterruptedException e) {}
}
System.out.print(c+" pushed! ");
data[index]=c;
index++;
this.notifyAll();
print();
}
public synchronized void pop(){
while(index==0){
try {
this.wait();
} catch (InterruptedException e) {}
}
index--;
System.out.print(data[index]+" poped! ");
data[index]=' ';
this.notifyAll();
print();
}
}
class Producer extends Thread{
MyStack ms;
public Producer(MyStack s){
this.ms=s;
}
public void run(){
for(char c='A';c<='Z';c++){
ms.push(c);
}
}
}
class Consumer extends Thread{
MyStack ms;
public Consumer(MyStack s){
this.ms=s;
}
public void run(){
for(int c=1;c<=26;c++){
ms.pop();
}
}
}
public class TestNumberCharPrint {
public static void main(String[] args) {
Object o=new Object();
Thread t1=new NumberThread(o);
Thread t2=new CharThread(o);
t1.start();
t2.start();
}
}
class NumberThread extends Thread{
Object o;
public NumberThread(Object o){
this.o=o;
}
public void run(){
synchronized (o) {
for (int i = 1; i <= 26; i++) {
System.out.println(i * 2 - 1);
System.out.println(i * 2);
o.notifyAll();
try {
if (i!=26) o.wait();
} catch (InterruptedException e) {
}
}
}
}
}
class CharThread extends Thread{
Object o;
public CharThread(Object o){
this.o=o;
}
public void run(){
synchronized (o) {
for (char c = 'A'; c <= 'Z'; c++) {
System.out.println(c);
o.notifyAll();
try {
if (c!='Z') o.wait();
} catch (InterruptedException e) {}
}
}
}
}
结果:
A
1 2
B
3 4
………
分享到:
相关推荐
### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...
书中的内容覆盖了Java语言的基础语法、面向对象编程、异常处理、多线程、集合框架、输入输出、网络编程等多个方面,是学习Java不可或缺的参考资料。 首先,关于Java基础,本书详细介绍了变量、数据类型、运算符、...
掌握这些基础概念和规则是学习Core Java的起点,随着深入学习,还将涉及异常处理、输入/输出、集合框架、多线程、网络编程等更多内容。对于初学者来说,理解并熟练运用这些知识是成为Java程序员的第一步。
CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 10 CoreJava DAY03 数组 20 CoreJava DAY04 27 ...CoreJava DAY19-20 多线程 154 CoreJava DAY21-22 IO 174 CoreJava DAY23 网络编程 197
Java是一种由Sun Microsystems在1995年推出的高级编程语言,现由Oracle公司维护。...以上就是Core Java学习笔记的主要内容概述,涵盖了从基础语法到高级特性的广泛知识,为深入理解和应用Java打下了坚实的基础。
Core Java 7,即《Core Java Volume I - Fundamentals》的第七版,它深入探讨了Java语言的核心特性,包括面向对象编程、集合框架、异常处理、多线程、输入/输出流以及网络编程等多个方面。源码分析对于理解这些概念...
在学习CoreJava时,我们需要掌握以下几个关键知识点: 1. **编程思想**: - 面向对象编程(Object-Oriented Programming, OOP):Java是一种纯面向对象的语言,一切皆为对象,理解类、对象、封装、继承、多态等...
根据提供的文件信息,我们可以推断出这是一套关于CoreJava的视频教程。下面将围绕CoreJava的核心知识点进行详细的介绍。 ### CoreJava基础知识 #### Java语言简介 Java是一种广泛使用的、面向对象的编程语言,由...
"COREJAVA学习代码"这个主题旨在帮助开发者深入理解和掌握Java的基本语法、类库以及编程实践。下面将详细阐述一些核心Java的学习知识点,这些知识点通常会在课堂讲解和教师布置的作业中出现。 1. **基础语法**:...
这只是Core Java学习文档的冰山一角,后续章节还会深入到类和对象、异常处理、输入输出、集合框架、多线程、网络编程等方面。掌握Core Java是成为熟练Java程序员的必经之路,它能帮助你构建坚实的基础,为更高级的...
【标签】:“corejava” 在计算机编程领域,Core Java是指Java的核心部分,它是Java技术的基础,涵盖了Java语言的基础语法、面向对象编程概念、图形用户界面(GUI)开发以及网络编程等方面。以下是对这些知识点的...
CoreJava_day11的学习笔记主要涵盖了集合框架,特别是关于List、Set和Map接口,以及ArrayList、Vector和LinkedList等具体实现类的知识点。 首先,集合框架是用来存放对象的对象,它提供了一组接口和类,使得我们...
"corejava7.zip"这个压缩包文件包含了与学习Java核心概念相关的代码示例,是初学者和进阶者调试及理解Java编程的宝贵资源。其中,"v1"可能代表了该代码库的第一个版本,意味着它可能包含了Java 7的基本特性和用法。 ...
《Core Java 1&2》是Java编程领域中两本非常经典的教材,分别对应于卷1和卷2,英文版提供了全面且深入的Java学习资源。这两本书由Cay S. Horstmann和Gary Cornell撰写,是许多程序员入门和进阶Java技术的重要参考书...
6. **多线程编程**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口、synchronized关键字、volatile属性以及线程池。这部分内容对于开发高性能、高并发的应用至关重要。 7. **输入/输出流**:Java的I/O流...
7. **多线程**: Java提供了内置的多线程支持,理解线程的创建、同步和通信对于开发并发应用程序非常重要。 8. **异常处理**: 异常是程序运行时可能出现的问题,学习如何有效地捕获和处理异常可以提高程序的健壮性。...
Java提供了强大的多线程支持,CoreJava源码涵盖了线程的创建、同步、通信等关键知识点。通过对这部分源码的学习,我们可以理解线程的生命周期、线程安全问题以及如何使用synchronized关键字、wait()、notify()等方法...
《CoreJava CoreJava CoreJava 基础学习》 在Java编程领域,"CoreJava"通常指的是Java语言的核心部分,不涉及高级特性如Java EE(企业版)或Android开发。这个概念涵盖了Java语言的基础语法、类库以及面向对象编程...
《CoreJava12示例代码》是一份针对Java编程语言深度学习的重要资源,主要涵盖了CoreJava12版本中的核心概念和特性。这份压缩包文件包含了丰富的示例代码,旨在帮助开发者深入理解Java语言的各个方面,提升编程技能。...