SMASHIN’ SCOPE is an acronym, created by Tony Buzan, to assist with memorization:
- Synesthesia/Sensuality
- Movement
- Association
- Sexuality
- Humor
- Imagination
- Numbers
- Symbolism
- Color
- Order and/or Sequence
- Positive Images
- Exaggeration
SMASHIN’ SCOPE is an acronym, created by Tony Buzan, to assist with memorization:
Threads share one address space (that is, they can all examine and modify the same variables). On the other hand, each thread has its own registers and execution stack pointer(執行堆疊), and perhaps private memory.
#include <iostream>
#include <condition_variable> // condition variable 條件變量
#include <thread>
#include <chrono>
std::condition_variable cv;
std::mutex cv_m; // This mutex is used for three purposes:
// 1) to synchronize accesses to i
// 2) to synchronize accesses to std::cerr
// 3) for the condition variable cv
int i = 0;
void waits() //used by t1,t2 & t3
{
std::unique_lock<std::mutex> lk(cv_m);
std::cerr << "Waiting... \n";
cv.wait(lk, []{return i == 1;}); //wait(lock)
std::cerr << "...finished waiting. i == 1\n";
}
void signals()// used by thread t4
{
std::this_thread::sleep_for(std::chrono::seconds(5));
{
std::lock_guard<std::mutex> lk(cv_m);
std::cerr << "Notifying...\n";
}
cv.notify_all();
std::this_thread::sleep_for(std::chrono::seconds(5));
{
std::lock_guard<std::mutex> lk(cv_m);
i = 1;
std::cerr << "Notifying again...\n";
}
cv.notify_all();
}
int main()
{
std::thread t1(waits), t2(waits), t3(waits), t4(signals);
t1.join();
t2.join();
t3.join();
t4.join();
}
/*
Produce results in sequence:
1.thread t1,t2,t3 are waiting
Waiting...
Waiting...
Waiting...
2. broadcast after 5 s
Notifying...
3. broadcast after another 5 s
Notifying again...
4. thread t1,t2,t3 are unlocked
...finished waiting. i == 1
...finished waiting. i == 1
...finished waiting. i == 1
*/
package waitNotify;
class Badminton { // 在羽球類別中,設定羽毛球物件的屬性和方法
private boolean isShooting = false;
public synchronized void sShuttlecock(int tNo) {
while (isShooting) {
try {
wait();
} catch (InterruptedException e) {}
}
System.out.println("射出第"+tNo+" 顆羽球");
isShooting = true;
notify();
}
public synchronized void hShuttlecock(int aNo) {
while (!isShooting) {
try {
wait();
} catch (InterruptedException e) {}
}
System.out.println("擊回第"+aNo+" 顆羽球");
isShooting = false;
notify();
}
}
class Shooting implements Runnable{
Badminton shuttlecock;
Shooting (Badminton shuttlecock){
this.shuttlecock = shuttlecock;
}
public void run() {
for (int i = 1; i <= 5; i++) {
shuttlecock.sShuttlecock(i);
}
}
}
class Hit implements Runnable{
Badminton shuttlecock;
Hit (Badminton shuttlecock){
this.shuttlecock = shuttlecock;
}
public void run() {
for (int i = 1; i <= 5; i++) {
shuttlecock.hShuttlecock(i);
}
}
}
public class WaitNotify {
public static void main(String[] args) {
// TODO Auto-generated method stub
Badminton shuttlecock = new Badminton();
Thread machine = new Thread(new Shooting(shuttlecock));
Thread hitter = new Thread(new Hit(shuttlecock));
machine.start();
hitter.start();
}
}
package ex01;
import java.util.Scanner;
public class Hello {
public static void main (String[] args) {
Scanner scn = new Scanner(System.in);
System.out.print("Please enter name:");
String strName = scn.next(); /* declare a string variable named "strName", use scn.next() method to get what string a user entered, then assign to "strName". */
System.out.println("Hi !" + strName + ",Welcome to Java world!");
scn.close();
}
}